접근
분할 정복은 재귀적으로 자신을 호출하면서 연산의 단위를 줄여가는 방식이다. 이 문제에서는 전체를 확인하고, 해결되지 않았을 경우(색이 모든 칸에서 동일하지 않을 경우) 기존의 영역을 4등분하여 새로운 연산을 진행하게 된다.
코드
import sys
n = int(sys.stdin.readline())
board = []
for _ in range(n):
board.append(list(map(int, sys.stdin.readline().split())))
count = [0, 0] # 하얀색, 파란색
def cut(x, y, n):
check = board[x][y]
for i in range(x, x + n):
for j in range(y, y + n):
if check != board[i][j]:
cut(x, y, n // 2)
cut(x, y + n // 2, n // 2)
cut(x + n // 2, y, n // 2)
cut(x + n // 2, y + n // 2, n // 2)
return
if check == 0:
count[0] += 1
return
else:
count[1] += 1
return
cut(0, 0, n)
print(count[0])
print(count[1])
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 1780번: 종이의 개수 (Python) (0) | 2021.04.01 |
---|---|
백준 1992번: 쿼드트리 (Python) (0) | 2021.04.01 |
백준 5430번: AC (Python) (0) | 2021.04.01 |
백준 19298번: 오큰수 (Python) (0) | 2021.04.01 |
백준 1874번: 스택 수열 (Python) (0) | 2021.04.01 |
최근댓글