
문제를 살펴보면 이번에는 쿼드트리(백준 1992)와 비슷한데 4개 대신 9개로 나누는 문제이다
그래서 이번에도 일단 size에 따른 리스트로 값을 입력받아준다
size = int(input())
paper = []
for _ in range(size):
paper.append(list(map(int, input().split())))
이후에 -1, 0, 1을 저장할 변수를 선언하고 문제를 해결할 함수를 호출해주면 된다
함수에서 main부분에서 선언한 변수를 전역변수로 선언해주고, 기존처럼 왼쪽 제일 위 첫번째 위치를
기준으로 색깔을 비교하면 된다 색깔을 비교하다가 만약 색깔이 다르다면 9개의 사각형으로 나누어
각 위치별로 함수를 호출해주면 된다 이후 해당 사각형의 색깔에 따라 변수에 값을 저장해주면 끝이다
def sol(x, y, size):
global minus, zero, one
color = paper[x][y] # 기준
# 1 2 3
# 4 5 6
# 7 8 9
# 위의 형식으로 재귀함수 호출
for i in range(x, x + size):
for j in range(y, y + size):
if color != paper[i][j]:
sol(x, y, size // 3) # 1
sol(x, y + size // 3, size // 3) # 2
sol(x, y + size * 2 // 3, size // 3) # 3
sol(x + size // 3, y, size // 3) # 4
sol(x + size // 3, y + size // 3, size // 3) # 5
sol(x + size // 3, y + size * 2 // 3, size // 3) # 6
sol(x + size * 2 // 3, y, size // 3) # 7
sol(x + size * 2 // 3, y + size // 3, size // 3) # 8
sol(x + size * 2 // 3, y + size * 2 // 3, size // 3) # 9
return
if color == -1:
minus += 1
elif color == 0:
zero += 1
elif color == 1:
one += 1
size = int(input())
paper = []
for _ in range(size):
paper.append(list(map(int, input().split())))
minus, zero, one = 0, 0, 0
sol(0, 0, size)
print(minus, zero, one, sep = "\n")
앞서 문제들을 해결하였다면 쉽게 해결할 수 있는 문제이다


'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 11401 이항 계수 3(골드 1) - Python (0) | 2025.01.30 |
|---|---|
| [Baekjoon]백준 1629 곱셈(실버 1) - Python (1) | 2025.01.29 |
| [Baekjoon]백준 1992 쿼드트리(실버 1) - Python (1) | 2025.01.27 |
| [Baekjoon]백준 2630 색종이 만들기(실버 2) - Python (0) | 2025.01.26 |
| [Baekjoon]백준 13305 주유소(실버 3) - Python (0) | 2025.01.25 |