CS/Algorithm 문제
[BaekJoon] 백준 2630번 색종이 만들기
심심231
2021. 7. 31. 16:43
[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
반응형