[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
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 1182번 부분수열의 합 (0) | 2021.08.06 |
---|---|
[BaekJoon] 백준 18870번 좌표 압축 (0) | 2021.07.31 |
[BaekJoon] 백준 1620번 나는야 포켓몬 마스터 이다솜 (0) | 2021.07.31 |
[BaekJoon] 백준 1074번 Z (Python) (0) | 2021.07.31 |
[BaekJoon] 백준 11047번 동전 0 (0) | 2021.07.24 |