백준 1780 종이의 개수 - 파이썬
문제. 풀이. 쿼드트리를 이용한 방식과 비슷한데 쿼드트리는 4분할로 나눴다면 이 문제는 9분할로 나누기만 하면된다. 그리고 -1, 0, 1 을 구분해서 숫자를 카운트 해주면 된다. 소스코드. import sys def div_con(x, y, n): global count, paper num = paper[x][y] check = 0 for i in range(x, x+n): if check != 0: break for j in range(y, y+n): if num != paper[i][j]: """ 9분할로 나누기 """ div_con(x, y, n//3) div_con(x, y+(n//3), n//3) div_con(x, y+(2*(n//3)), n//3) div_con(x+(n//3), y, n/..
백준 1992 쿼드트리 - 파이썬
문제. 풀이. 저번에 풀었던 색종이접기와 매우 유사하다. 똑같이 분할정복 알고리즘을 이용하여 쿼드트리 방식으로 나눠준다. 0 또는 1 하나로만 이루어지지 않았다면 괄호를 추가하고 분할을 하면 된다. 소스코드. import sys def div_con(x, y, n): global compression, paper color = paper[x][y] check = 0 for i in range(x, x+n): if check != 0: break for j in range(y, y+n): if color != paper[i][j]: compression += '(' # 0, 1 하나로만 이루어지지 않았으면 '(' 추가 div_con(x, y, n//2) # 2사분면 div_con(x, y+(n//2), n..
백준 2630 색종이 만들기 - 파이썬
풀이. 분할정복 알고리즘을 사용해야한다. 전체를 검사하고 나서 조건에 맞지 않는다면 4분면으로 분할하여 제일 작은 부분까지 체크를 하는방식이다. 소스코드. import sys def div_con(x, y, n): global blue, white, paper color = paper[x][y] check = 0 for i in range(x, x+n): if check != 0: break for j in range(y, y+n): if color != paper[i][j]: div_con(x, y, n//2) # 2사분면 div_con(x, y+(n//2), n//2) # 1사분면 div_con(x+(n//2), y , n // 2 ) # 3사분면 div_con(x+(n//2), y+(n//2), n..