코딩테스트 대비/BOJ

[Baekjoon/Python] 2630번: 색종이 만들기 - 효과는 굉장했다!

bluetag_boy 2021. 11. 12. 05:14
반응형
 

2630번: 색종이 만들기

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

www.acmicpc.net

알고리즘 분류

  • 분할 정복
  • 재귀

 

SOLUTION

import sys

def paper(x, y, N) :
  color = paper_list[x][y] 
  
  for i in range(x, x+N) :
    for j in range(y, y+N) :
      if color != paper_list[i][j] :  # 같은 색이 아니면 4개의 구역으로 나눔
        paper(x, y, N//2) # 왼쪽 위
        paper(x, y+N//2, N//2) # 오른쪽 위
        paper(x+N//2, y, N//2) # 왼쪽 아래
        paper(x+N//2, y+N//2, N//2) # 오른쪽 아래

        return

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

  else :
    result.append(1)


N = int(sys.stdin.readline())
paper_list = [list(map(int, sys.stdin.readline().split())) for _ in range(N)] 

result = []

paper(0,0,N) # 0,0 부터 탐색 시작

print(result.count(0))
print(result.count(1))