본문 바로가기

Baekjoon

[Baekjoon]백준 1780 종이의 개수(실버 2) - Python

문제설명

문제를 살펴보면 이번에는 쿼드트리(백준 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")

앞서 문제들을 해결하였다면 쉽게 해결할 수 있는 문제이다