[백준] 2630번 색종이 만들기 _ 문제 풀이

 


1. 문제

https://www.acmicpc.net/problem/2630

2. 풀이

재귀함수를 통해서 쉽게 문제를 해결할 수 있습니다.

blue_paper, white_paper = 0, 0
N = int(input())
arr = [ list(map(int, input().split())) for _ in range(N) ]

## 재귀 함수 -> 정해진 구역의 값이 다 동일한지 확인
def is_one_paper(size, row, col):
    global blue_paper, white_paper
    base = arr[row][col]
    for r in range(row, row + size):
        for c in range(col, col + size):
            if arr[r][c] != base:
                next_size = int(size/2)
                is_one_paper(next_size, row, col)
                is_one_paper(next_size, row + next_size, col)
                is_one_paper(next_size, row, col + next_size)
                is_one_paper(next_size, row + next_size, col + next_size)
                return False
    # 전부 동일하면 개수 갱신
    if base == 1:
        blue_paper += 1
    else:
        white_paper += 1
    return True

is_one_paper(N, 0, 0)
print(white_paper)
print(blue_paper)