미소를뿌리는감자의 코딩

[백준 2024/09/10] 2630번 색종이 만들기 본문

코딩 테스트/백준

[백준 2024/09/10] 2630번 색종이 만들기

미뿌감 2024. 9. 10. 17:21
728x90

1. 문제

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

 

2. 접근 방법

대상이 되는 사각형에서, 합이 n**2 혹은 0 이라면, blue +=1, white +=1을 해준 후, return을 해준다.

만약, 이에 해당되지 않는다면, 4개로 자른 후, 다시 함수에 넣어주어야 한다.

 

3. 코드

blue = 0
white = 0


def make_origami(n):
    origami = []
    for i in range(n):
        ori = list(map(int, input().split()))
        origami.append(ori)

    return n, origami


def count_blue_white(left, right, up, down, origami, n):
    global blue
    global white

    summed = 0

    for i in range(up, down, 1):
        for j in range(left, right, 1):
            summed += origami[i][j]

    if summed == n**2:
        blue += 1
        return

    elif summed == 0:
        white += 1
        return

    else:
        width_mid = int((left + right)/2)
        height_mid = int((up + down)/2)
        n = int(n/2)

        count_blue_white(left, width_mid, up, height_mid, origami, n)
        count_blue_white(width_mid, right, up, height_mid, origami, n)
        count_blue_white(left, width_mid, height_mid, down, origami, n)
        count_blue_white(width_mid, right, height_mid, down, origami, n)


if __name__ == "__main__":
    n, origami = make_origami(int(input()))
    count_blue_white(0, n, 0, n, origami, n)
    print(white)
    print(blue)
728x90