

문제를 살펴보면 각 정사각형(사이즈는 2^0, 2^1....) 안에 하나의 색깔만 존재하도록 하는 경우를 찾아
그 정사각형의 색이 하얀색인 경우와 파란색인 경우를 각 줄마다 출력하는 문제이다
해당 문제를 풀기위해서 재귀함수를 사용하는 방법을 생각하였다 만약 정사각형 안을 확인하다가
다른 색깔이 등장하면 그 정사각형에서 size별로 다시 나누어야하기 때문이다
그래서 특정 사각형의 제일 첫번째 위치의 색깔을 기준으로 삼고, for문을 통해 전체 정사각형의 색깔을 확인
하는 로직을 작성하였다 이후에 if문을 통해서 색이 다른 경우를 찾게되고, 만약 그러한 경우를 찾게 된다면
재귀적으로 함수를 호출하되, size는 2로 나눈 값을 넣어주고 x, y는 새로운 size에 맞게 이동하여주면 된다
sol(x, y, size // 2) # 1사분면
sol(x, y + size // 2, size // 2) # 2사분면
sol(x + size // 2, y, size // 2) # 3사분면
sol(x + size // 2, y + size // 2, size // 2) # 4사분면
이후 기준점의 색깔이 하얀색인 경우와 파란색인 경우로 나누어 +1을 해준 값을 전역변수에 저장하면 된다
그리고 제일 처음 확인하는 기준은 0, 0이고, size는 입력받은 값이므로 이를 함수에 넣어주면 된다
def sol(x, y, size):
global white, blue
color = square[x][y] # 기준
for i in range(x, x + size):
for j in range(y, y + size):
if color != square[i][j]: # 색이 다른 경우
sol(x, y, size // 2) # 1사분면
sol(x, y + size // 2, size // 2) # 2사분면
sol(x + size // 2, y, size // 2) # 3사분면
sol(x + size // 2, y + size // 2, size // 2) # 4사분면
return
if color == 0:
white += 1
else:
blue += 1
size = int(input())
square = []
white, blue = 0, 0
for _ in range(size):
square.append(list(map(int, input().split())))
sol(0, 0, size)
print(white)
print(blue)


'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 1780 종이의 개수(실버 2) - Python (0) | 2025.01.28 |
|---|---|
| [Baekjoon]백준 1992 쿼드트리(실버 1) - Python (1) | 2025.01.27 |
| [Baekjoon]백준 13305 주유소(실버 3) - Python (0) | 2025.01.25 |
| [Baekjoon]백준 1541 잃어버린 괄호(실버 2) - Python (1) | 2025.01.24 |
| [Baekjoon]백준 11399 ATM(실버 4) - Python (0) | 2025.01.23 |