본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 2630번 색종이 만들기(python)

by 윤무무 2023. 2. 14.

 

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

 

2630번: 색종이 만들기

첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.

www.acmicpc.net

 

1. 내가 작성한 코드
n = int(input()) #한 변의 길이

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

result = []

def cut(x,y,n):

  color = paper[x][y] #첫 paper의 색
  
  for i in range(x, x+n):
    for j in range(y,y+n):
      if color != paper[i][j]: #첫 paper와 다른 paper의 색이 같지 않을 경우 재귀
        cut(x,y,n//2) #1사분면
        cut(x,y+n//2,n//2) #2사분면
        cut(x+n//2,y,n//2) #3사분면
        cut(x+n//2,y+n//2,n//2) #4사분면
        return

  if color == 0:
    result.append(0)
  else: 
    result.append(1)

cut(0,0,n)
print(result.count(0))
print(result.count(1))

아우 분할과 정복 너무 어렵잖슴 ㅠ_ㅠ

 

열심히 구글링해서 풀었다.

댓글