백준 2630 - 색종이 만들기 (Python3)
코드
# 전체 종이의 한 변의 길이 (2, 4, 8, 16, 32, 64, 128)
N = int(input())
# 색종이 색상 정보를 입력받을 리스트
paper = [list(map(int, input().split())) for _ in range(N)]
# 색 종류 (0 : 흰색, 1 : 파란색)
color_list = []
# 쿼드트리 알고리즘
def quad_tree(x, y, N):
# x, y 좌표의 현재 색을 담을 변수 (0 or 1)
color = paper[x][y]
# 모든 좌표를 탐색
for i in range(x, x+N):
for j in range(y, y+N):
# 탐색이 시작된 좌표의 색과 현재 탐색 중인 좌표의 색이 다르면
# 4분할을 하여 재탐색
# x, y => 분할된 영역의 좌측 맨 위 좌표
# N => 4분할이기 때문에 길이는 절반
if color != paper[i][j]:
quad_tree(x, y, N//2)
quad_tree(x, y+N//2, N//2)
quad_tree(x+N//2, y, N//2)
quad_tree(x+N//2, y+N//2, N//2)
return
if color == 0:
color_list.append(0)
else:
color_list.append(1)
# (0, 0)부터 시작
quad_tree(0, 0, N)
# 흰색의 개수
print(color_list.count(0))
# 파란색의 개수
print(color_list.count(1))
문제 해설
분할 정복, (쿼드 트리, 재귀)를 활용한 문제이다.
위의 문제와 매우 유사하여 풀이는 위의 링크를 참고해주시기 바랍니다!!!
댓글남기기