sm 기술 블로그
166. 1780(종이의 개수) - 파이썬 본문
import sys
input = sys.stdin.readline
N = int(input())
paper = [list(map(int, input().split())) for _ in range(N)]
result = []
def find(x, y, N):
color = paper[x][y]
for i in range(x, x+N):
for j in range(y, y+N):
if color != paper[i][j]:
for k in range(3):
for l in range(3):
find(x + k * N // 3, y + l * N // 3, N // 3)
return
if color == -1:
result.append(-1)
elif color == 0:
result.append(0)
else:
result.append(1)
find(0, 0, N)
print(result.count(-1))
print(result.count(0))
print(result.count(1))
문제요약
9개로 나누면서 온전한 N*N 색종이를 만들어라
설명
단순히 생각하면 된다.
이런 종이가 N*N 색종이로 표현이 불가능 할때,
다음과 같이 나누고 또 N*N이 되지 않을 때
이런식으로 9개씩 나눈다는 이야기이다.
color = paper[x][y]
색상을 하나 픽해준다.
for i in range(x, x+N):
for j in range(y, y+N):
if color != paper[i][j]:
이제 비교를 하는데 픽한 색상과 다르다면 if문 조건에 들어간다.
for k in range(3):
for l in range(3):
find(x + k * N // 3, y + l * N // 3, N // 3)
return
색상이 다를경우 9개로 나누어야 한다.
따라서 k와 l을 통해 9번 find함수가 실행되고
9등분한 각 부분의 첫번째를 x,y에 넣어 find를 호출한다.
if color == -1:
result.append(-1)
elif color == 0:
result.append(0)
else:
result.append(1)
find(0, 0, N)
print(result.count(-1))
print(result.count(0))
print(result.count(1))
각 색상을 넣고 세어 출력해준다.
'문제 > 백준_파이썬' 카테고리의 다른 글
168. 1629(이항계수3) - 파이썬 (0) | 2022.08.01 |
---|---|
167. 1629(곱셈) - 파이썬 (0) | 2022.07.31 |
165. 1992(쿼드트리) - 파이썬 (0) | 2022.07.30 |
164. 2630 (색종이 만들기) - 파이썬 (0) | 2022.07.30 |
163. 5430(AC) - 파이썬 (0) | 2022.07.28 |
Comments