Algorithm
[BOJ-1780] 종이의 개수 Python
hadaney
2020. 7. 2. 18:03
cache.values():
# 파이썬의 재귀호출과 관련한 에러를 제어
import sys
sys.setrecursionlimit(100000)
#input_matrix=[[0, 0, 0, 1, 1, 1, -1, -1, -1], [0, 0, 0, 1, 1, 1, -1, -1, -1], [0, 0, 0, 1, 1, 1, -1, -1, -1], [1, 1, 1, 0, 0, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 1, -1, 0, 1, -1, 0, 1, -1], [0, -1, 1, 0, 1, -1, 0, 1, -1], [0, 1, -1, 1, 0, -1, 0, 1, -1]]
# 입력값 받기
_len = int(input())
input_matrix = [[]]*_len
for idx in range(_len):
input_matrix[idx] = list(map(int, input().split(' ')))
# 초기값 설정
cache = {-1:0, 0:0, 1:0}
def sub_solution(i, j, n):
# 1) 원소가 한개라면
if n==1:
cache[input_matrix[i][j]] += 1
return
# 2) 모든 원소가 같은지 확인
flag = True
for ii in range(i,i+n):
for jj in range(j,j+n):
if input_matrix[i][j] != input_matrix[ii][jj]:
flag = False
break
# 3) 모든 원소가 다르면 9개의 sub matrix로 나누어 재귀호출
if flag:
cache[input_matrix[i][j]] += 1
return
else:
for jump_i in range(0,3):
for jump_j in range(0,3):
sub_solution(i+(n//3*jump_i), j+(n//3*jump_j), n//3)
return
# 결과 확인
def solution():
sub_solution(0,0,_len)
for value in cache.values():
print(value)
solution()
코드를 짜다가 두가지 흥미로운 사실을 발견했다.
1) 재귀호출
파이썬은 재귀호출이 일정 수준을 넘어가면 에러가 발생되도록 설정되어 있다.
sys.setrecursionlimit(100000) 이를 통해 해결가능
2) return
파이썬 함수에서 return하려는 값을 따로 명시(return X)하지 않고 return 으로 끝내게 되면 None을 return하게된다.