
과정
- 정사각형의 0, 1, -1 개수 세어보고 하나만 0이 아닌 경우면 종이에 모두 같은 수라고 생각
- 하나만 0이 아닌 경우가 아니면 수가 섞여있음. 9등분해서 0, 1, -1 개수 세어봄
N = int(input())
map_lst = [list(map(int, input().split())) for _ in range(N)]
ans_1 = 0
ans_0 = 0
ans_2 = 0
def square(x, y, N):
global ans_1, ans_0, ans_2
# N == 1이면, 0, 1, -1, 개수 반환
num_1 = 0
num_0 = 0
num_2 = 0
for i in range(N):
for j in range(N):
if map_lst[y+i][x+j] == 0:
num_0 += 1
elif map_lst[y+i][x+j] == 1:
num_1 += 1
elif map_lst[y+i][x+j] == -1:
num_2 += 1
num_lst = [num_1, num_0, num_2]
sub = 0
for i in num_lst:
if i == 0:
sub += 1
if sub != 2:
N = N // 3
for i in range(3):
for j in range(3):
square(x+j*N, y+i*N, N)
else:
if num_lst[0] != 0:
ans_1 += 1
elif num_lst[1] != 0:
ans_0 += 1
elif num_lst[2] != 0:
ans_2 += 1
square(0, 0, N)
print(ans_2)
print(ans_0)
print(ans_1)
- Python 3으로는 시간초과가 발생하고, PyPy3으로는 통과되지만, 메모리가 많이 필요하다. ( 좋은 코드가 아니다 )
- 한 종이에 숫자가 섞인걸 알게된 순간 반복문 중단하고 종이 9등분하도록 하면 수행 시간을 단축할 수 있을 것 같다.