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)
PREVIOUS[백준] 8958번 OX퀴즈 _ 문제 풀이