본문 바로가기
PS/재귀

[백준] 1780번: 종이의 개수 파이썬

by 3급우사기 2024. 2. 28.

https://www.acmicpc.net/problem/1780

 

1780번: 종이의 개수

N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수

www.acmicpc.net

간단해!

 

이 문제는 저번에 푼 2630번 색종이 문제와 매우 유사합니다!

종이를 4등분 > 9등분

색이 2개 > 3개

그래서 전에 쓴 코드를 아주 살짝 수정했습니다!

 

def paper(a, b, n):
    global mone, zero, one
    color = field[a][b]
    for i in range(a, a+n):
        for j in range(b, b+n):
            if color != field[i][j]:
                paper(a, b, n//3)
                paper(a + n//3, b, n//3)
                paper(a + 2 * n//3, b, n//3)
                paper(a, b + n//3, n//3)
                paper(a, b + 2 * n//3, n//3)
                paper(a + n//3, b + n//3, n//3)
                paper(a + 2* n//3, b + n//3, n//3)
                paper(a + n//3, b + 2*n//3, n//3)
                paper(a + 2* n//3, b + 2*n//3, n//3)
                return
    if color == 0:
        zero += 1
    elif color == 1:
        one += 1
    else:
        mone += 1

global mone, zero, one
mone = 0
zero = 0
one = 0
n = int(input())
field = [list(map(int,input().split())) for _ in range(n)]
paper(0, 0, n)
print(mone)
print(zero)
print(one)

 

좀 더 자세한 풀이를 알고싶다면 여기를 참고해주세요

https://usagi-coding.tistory.com/3

 

[백준] 2630번: 색종이 만들기 파이썬

https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄

usagi-coding.tistory.com