https://www.acmicpc.net/problem/1780
import sys
input=sys.stdin.readline
N=int(input())
board=[list(map(int,input().split())) for _ in range(N)]
cnt=dict()
cnt['-1']=0
cnt['0']=0
cnt['1']=0
def divide_conquer(n,board,i,j):
side=n//3
numSet=set()
for a in range(i,i+n):
for b in range(j,j+n):
numSet.add(board[a][b])
if len(numSet)==1:
cnt[str(list(numSet)[0])]+=1
return
else:
divide_conquer(side,board,i,j)
divide_conquer(side,board,i+side,j)
divide_conquer(side,board,i+side*2,j)
divide_conquer(side,board,i,j+side)
divide_conquer(side,board,i,j+side*2)
divide_conquer(side,board,i+side,j+side)
divide_conquer(side,board,i+side*2,j+side)
divide_conquer(side,board,i+side*2,j+side*2)
divide_conquer(side,board,i+side,j+side*2)
divide_conquer(N,board,0,0)
print(cnt['-1'])
print(cnt['0'])
print(cnt['1'])
각 종이에서 분할정복으로 9방면으로 들어가서 각 통일되었을 때는 1개 통일되지 않았을 때는 끝까지 들어가는 방식으로 갯수를 구하면 되는 문제이다.
이렇게 Python로 백준의 "종이의 개수" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊