2630: 색종이

ewillwin·2023년 6월 15일
0

Problem Solving (BOJ)

목록 보기
68/230

  • Divide & Conquer -> 재귀로 풀이
  • conquer 함수에서 (0, 0)부터 시작하여 Paper를 순회함
    -> 만약 처음 색과 다른 색을 만났다면 정사각형을 4부분으로 나누어 재귀 호출
    -> return 이후에 color에 따라 색 count를 1 증가시켜줌
import sys

def conquer(x, y, N):
	global white; global blue

	color = Paper[x][y]
	for i in range(x, x + N):
		for j in range(y, y + N):
			if Paper[i][j] != color:
				conquer(x, y, N//2)
				conquer(x, y + N//2, N//2)
				conquer(x + N//2, y, N//2)
				conquer(x + N//2, y + N//2, N//2)
				return
	if color == 0:
		white += 1
	else:
		blue += 1

N = int(input())
Paper = []
for n in range(N):
	Paper.append(list(map(int, sys.stdin.readline()[:-1].split())))

white = 0; blue = 0
conquer(0, 0, N)
print(white); print(blue)
profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글