본문 바로가기
알고리즘 풀이/분할정복

[백준/파이썬] 2630번 : 색종이 만들기

by developer jini 2023. 1. 11.
728x90

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

 

2630번: 색종이 만들기

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

www.acmicpc.net

1,2,3,4 사분면의 좌표를 생각하면 문제에 접근할 수 있다 . 그래도 코드를 생각하기엔 조금 버거운 문제였다.

N = int(input())
arr = []
for _ in range(N):
    arr.append(list(map(int, input().split())))
result = []


def div(x, y, N):
    color = arr[x][y]
    for i in range(x, x + N):
        for j in range(y, y + N):
            if color != arr[i][j]:
                # 제 1 사분면
                div(x, y, N // 2)
                # 제 2 사분면
                div(x, y + N // 2, N // 2)
                # 제 3 사분면
                div(x + N // 2, y, N // 2)
                # 제 4 사분면
                div(x + N // 2, y + N // 2, N // 2)
                return
    if color == 0:
        result.append(0)
    else:
        result.append(1)


div(0, 0, N)
print(result.count(0))
print(result.count(1))

 

728x90

댓글