접근

이전 2630번 색종이 만들기와 동일한 문제이지만, 2 * 2가 아닌 3 * 3으로 나눈다는 것만 수정해 주면 되겠다.

2021.04.01 - [코딩/백준 (Python)] - 백준 2630번: 색종이 만들기 (Python)

 

백준 2630번: 색종이 만들기 (Python)

접근 분할 정복은 재귀적으로 자신을 호출하면서 연산의 단위를 줄여가는 방식이다. 이 문제에서는 전체를 확인하고, 해결되지 않았을 경우(색이 모든 칸에서 동일하지 않을 경우) 기존의 영역

ca.ramel.be

코드

import sys

n = int(sys.stdin.readline())
board = []
for _ in range(n):
    board.append(list(map(int, sys.stdin.readline().split())))
count = [0, 0, 0]  # -1, 0, 1


def cut(x, y, n):
    check = board[x][y]
    for i in range(x, x + n):
        for j in range(y, y + n):
            if check != board[i][j]:
                cut(x, y, n // 3)
                cut(x, y + n // 3, n // 3)
                cut(x, y + 2 * n // 3, n // 3)
                cut(x + n // 3, y, n // 3)
                cut(x + n // 3, y + n // 3, n // 3)
                cut(x + n // 3, y + 2 * n // 3, n // 3)
                cut(x + 2 * n // 3, y, n // 3)
                cut(x + 2 * n // 3, y + n // 3, n // 3)
                cut(x + 2 * n // 3, y + 2 * n // 3, n // 3)
                return
    if check == -1:
        count[0] += 1
        return
    elif check == 0:
        count[1] += 1
        return
    else:
        count[2] += 1
        return


cut(0, 0, n)
print(count[0])
print(count[1])
print(count[2])

더 생각해 볼 것?

...

코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기