728x90
반응형
https://www.acmicpc.net/problem/1780
Python - 코드 정리 후
import sys
input = sys.stdin.readline
n = int(input())
arr = [list(map(int,input().split())) for _ in range(n)]
def recur(r,c,size):
global arr
if size<=1:
return [arr[r][c]]
size //= 3
ans = []
for i in range(3):
for j in range(3):
ans += recur(r+size*i, c+size*j,size)
for x in ans:
if x != ans[0]:
return ans
return [ans[0]]
ans = recur(0,0,n)
result = [0,0,0]
for a in list(map(int,ans)):
result[a] += 1
print(result[2])
print(result[0])
print(result[1])
Python - 코드 정리 전
import sys
input = sys.stdin.readline
n = int(input())
arr = [list(map(int,input().split())) for _ in range(n)]
for i in range(n):
for j in range(n):
if arr[i][j]==-1:
arr[i][j] = 2
def recur(r,c,size):
global arr
ans = str(arr[r][c])
if size<=1:
return ans
for i in range(size):
for j in range(size):
if ans != arr[r+i][c+j]:
size //= 3
ans = ""
ans += recur(r, c, size)
ans += recur(r+size, c, size)
ans += recur(r+size*2, c, size)
ans += recur(r, c+size, size)
ans += recur(r+size, c+size, size)
ans += recur(r+size*2, c+size, size)
ans += recur(r, c+size*2, size)
ans += recur(r+size, c+size*2, size)
ans += recur(r+size*2, c+size*2, size)
for x in ans:
if x != ans[0]:
return ans
return ans[0]
return ans
ans = recur(0,0,n)
result = [0,0,0]
for a in list(map(int,list(ans))):
result[a] += 1
print(result[2])
print(result[0])
print(result[1])
+) 재귀의 분할 정복은
Sol1) 분할을 해야하는가 체크 + 모든 등분에 대해 몰아서 재귀 실행
Sol2) 모든 등분에 대해 몰아서 재귀 실행 + 합칠 수 있는가
728x90
반응형
'Algorithm Problems' 카테고리의 다른 글
[백준][Python] 색종이 만들기 - 재귀(분할정복) (0) | 2021.08.31 |
---|---|
[백준][Python] 1932번 정수 삼각형 - DP (0) | 2021.08.30 |
[백준][Python] 1992번 쿼드트리 - 재귀(분할정복) (0) | 2021.08.29 |
[백준][Python] 1991번 트리순회 - 트리 (0) | 2021.08.26 |
[백준][Python] 2096번 내려가기 - DP (0) | 2021.08.26 |