CS/Algorithm 문제

[BaekJoon] 백준 2630번 색종이 만들기

[BaekJoon] 백준 2630번 색종이 만들기

 

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

 

내코드

 

재귀로 푸는 쉬운 문제였다.

배열 정보를 받아서 한변의 길이 & x 좌표 & y 좌표 이렇게 3개의 값으로 사분면 모두를 돈다.

만약 특정 사분면의 모든 값이 같다면 더이상 자를 필요가 없으므로 해당 색상 + 1 을 해주고 해당 사분면을 확인하는 것을 종료하고

만약 특정 사분면의 모든 값이 같지 않다면 한번더 4등분해서 들어간다(재귀).

def checkSame(n, x, y):
    global arr
    value = arr[x][y]
    for i in range(n):
        for j in range(n):
            if arr[x + i][y + j] != value:
                return False
    return True


def solv(n, x, y):
    global arr, white, blue
    if checkSame(n, x, y):
        if arr[x][y] == 0:
            white += 1
        else:
            blue += 1
    else:
        new_n = int(n / 2)
        solv(new_n, x, y)
        solv(new_n, x + new_n, y)
        solv(new_n, x, y + new_n)
        solv(new_n, x + new_n, y + new_n)


N = int(input())
arr = [0 for _ in range(N)]
white = 0
blue = 0

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

solv(N, 0, 0)
print(white)
print(blue)

 

728x90
반응형