색종이 만들기
백준 2630
분할정복
: 문제를 나눌 수 없을 때까지 나누어서 각각을 풀면서 다시 합병하여 문제의 답을 얻는다.
n = int(input())
paper = [list(map(int, input().split())) for _ in range(n)]
white = 0
blue = 0
def quad_tree(x, y, n):
global white, blue
flag = 0
color = paper[x][y]
for i in range(x, x+n):
for j in range(y, y+n):
#처음 color와 다르면 flag++
if color != paper[i][j]:
flag += 1
break
#조건이 만족되지 않을 시에는 쪼개어서 푼다.
if flag != 0:
quad_tree(x, y, n//2) #1사분면
quad_tree(x, y+n//2, n//2) #2사분면
quad_tree(x+n//2, y, n//2) #3사분면
quad_tree(x+n//2, y+n//2, n//2) #4사분면
else:
if color == 0:
white += 1
else:
blue += 1
quad_tree(0,0,n) #(0,0)부터 시작
print(white)
print(blue)
전역변수를 쓰는게 좋지 않다고 해서 다음부터는 파라미터로 넘겨주도록 해야겠다. 조건에 맞고 안맞고를 기록하는 것은 flag변수를 통해서 했고 조건에 맞지 않으면 재귀를 통해 범위를 줄여나가면서 진행했다.
Author And Source
이 문제에 관하여(색종이 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sezeom/색종이-만들기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)