征服BOJ分割:カラーペーパーの作成(2630)


www.acmicpc.net/problem/2630
問題の定義
  • 0は白、1は青です.各色に何枚の正方形の紙を作ることができるかを見つけます.
  • の例では、9個の白色紙と7個の青色紙を作成することができる.

  • 正しいコード
  • 戻り~
  • n = int(input())
    paper = []
    for i in range(n):
        paper.append(list(map(int, input().split(" "))))
    
    n = 8
    paper = [[1, 1, 0, 0, 0, 0, 1, 1], 
    		[1, 1, 0, 0, 0, 0, 1, 1], 
            [0, 0, 0, 0, 1, 1, 0, 0], 
            [0, 0, 0, 0, 1, 1, 0, 0], 
            [1, 0, 0, 0, 1, 1, 1, 1], 
            [0, 1, 0, 0, 1, 1, 1, 1], 
            [0, 0, 1, 1, 1, 1, 1, 1], 
            [0, 0, 1, 1, 1, 1, 1, 1]]
    
    result = []
    def find_square(x, y, n):
        color = paper[x][y]
        for i in range(x, x+n):
            for j in range(y, y+n):
                if color != paper[i][j]:
                    find_square(x, y, n//2) # 좌 상단 정사각형
                    find_square(x, y+n//2, n//2) # 좌 하단 정사각형
                    find_square(x+n//2, y, n//2) # 우 상단 정사각형
                    find_square(x//2, y//2, n//2) # 우 하단 정사각형
                    return
        # code gets here only when color == papercell(x,y) ~ papercell(x+n, y+n)
        if color == 0:
            result.append(0)
        if color == 1:
            result.append(1)
    
    find_square(0,0,n)
    print(result.count(0)) # 12개의 흰색종이
    print(result.count(1)) # 7개의 파란색종이