N의 패턴 -> ' '으로 채워진 가운데의 (N/3) x (N/3)의 정사각형을 크기 (N/3)의 패턴으로 둘러싼 형태.
결국 재귀를 돌면서 N은 최소단위는 3이 되고, 탈출경로로 N=3일때의 패턴을 만들어 리턴.
** 재귀함수 최대깊이 설정
import sys
sys.setrecursionlimit(10**6)
파이썬의 재귀함수 기본 최대횟수가 1000회로 작아 대부분의 코딩테스트 문제에 적용시켜줘야 수월하다
** '\n'.join
'구분자(이 경우 줄넘김)'.join(리스트)를 이용하면 리스트의 값과 값 사이에 '구분자'에 들어온 구분자를 넣어서 하나의 문자열로 합친다.
** input 과 sys.studin.readline
둘은 기능상 큰 차이가 없으나 속도차이가 크다. 백준은 입력값을 받아서 문제를 푸는 구조기 때문에 우측을 자주 사용해보도록 합시다
내 제출
import sys
sys.setrecursionlimit(10**6) # 재귀함수 최대깊이 설정
def star(n):
if n == 3: # 탈출경로 설정
return ['***','* *','***']
arr = star(n//3)
stars = []
for i in arr:
stars.append(i*3)
for i in arr:
stars.append(i+' '*(n//3)+i)
for i in arr:
stars.append(i*3)
return stars
N = int(sys.stdin.readline().strip())
print('\n'.join(star(N)))