문제

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

걸린 시간

01 : 35 : 52

풀이

Python3

def cut(paper):
    # 한 변의 길이
    side = len(paper)    

    b = blue = w = white = count = 0

    piece = paper[0][0]

    # 1x1 조각일 때
    if side == 1:
        if piece == '0':
            white += 1
        else:
            blue += 1
        return white, blue 

    # 조각이 모두 같은 색일 때
    for row in range(0, side):
        for col in range(0, side):
            if piece == paper[row][col]:
                count += 1

    if count == side**2:
        if piece == '0':
            white += 1
        else:
            blue += 1
        return white, blue

    # 4번의 순환 호출
    for i in range(0, side, side//2):
        for j in range(0, side, side//2):
            cut_paper = []
            for row in range(i, i+side//2):
                tmp = []
                for col in range(j, j+side//2):
                    tmp.append(paper[row][col])
                cut_paper.append(tmp)
            w, b = cut(cut_paper)
            white += w
            blue += b

    return white, blue        

if __name__ == "__main__":
    # 한 변의 길이
    N = int(input())
    paper = [input().split() for i in range(0, N)]    

    white, blue = cut(paper)

    print(white)
    print(blue)

색종이를 4등분할 때 마다 종이의 크기는 1/4 로 줄어들게 된다. 문제의 크기가 점점 작아지므로 순환 구조를 사용하는것이 바람직하다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 1927번 최소 힙  (0) 2020.08.04
Baekjoon 11279번 최대 힙  (0) 2020.08.04
Baekjoon 1764번 듣보잡  (0) 2020.08.02
Baekjoon 1068번 트리  (0) 2020.08.01
Baekjoon 1620번 나는야 포켓몬 마스터 이다솜  (0) 2020.07.27

댓글