[코딩테스트][백준] 🔥 백준 1780번 "종이의 개수" 문제: Python으로 완벽 해결하기! 🔥

김상욱·2025년 1월 9일
post-thumbnail

문제 링크

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

🕒 Python 풀이시간: 20분

import sys

input=sys.stdin.readline

N=int(input())

board=[list(map(int,input().split())) for _ in range(N)]

cnt=dict()
cnt['-1']=0
cnt['0']=0
cnt['1']=0

def divide_conquer(n,board,i,j):
    side=n//3
    numSet=set()
    for a in range(i,i+n):
        for b in range(j,j+n):
            numSet.add(board[a][b])
    if len(numSet)==1:
        cnt[str(list(numSet)[0])]+=1
        return
    else:
        divide_conquer(side,board,i,j)
        divide_conquer(side,board,i+side,j)
        divide_conquer(side,board,i+side*2,j)
        divide_conquer(side,board,i,j+side)
        divide_conquer(side,board,i,j+side*2)
        divide_conquer(side,board,i+side,j+side)
        divide_conquer(side,board,i+side*2,j+side)
        divide_conquer(side,board,i+side*2,j+side*2)
        divide_conquer(side,board,i+side,j+side*2)

divide_conquer(N,board,0,0)

print(cnt['-1'])
print(cnt['0'])
print(cnt['1'])

각 종이에서 분할정복으로 9방면으로 들어가서 각 통일되었을 때는 1개 통일되지 않았을 때는 끝까지 들어가는 방식으로 갯수를 구하면 되는 문제이다.

이렇게 Python로 백준의 "종이의 개수" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊

0개의 댓글