이번 문제는 분할정복을 통해 해결할 수 있는 문제였다. 우선 문제를 보자마자 재귀 함수를 사용해야겠다는 생각을 했다. 왼쪽과 오른쪽에 대한 재귀 호출이 계속 이뤄져야 하는 것으로 보였다. 분할정복은 이렇게 일정한 부분으로 나눠서 따로 따로 처리하는 방식이다. 전체 길이에 대하여 왼쪽, 오른쪽 인덱스를 구하고 그 인덱스에 대하여 재귀호출 하는 방식으로 해결했다.
cur_l//3
을 저장한다.start+tmp
부터 start+tmp*2
까지 반복하는 i에 대한 for문을 돌린다.arr[i]
를 ' '으로 갱신한다.recursion(arr, start, tmp)
를 재귀호출한다. (왼쪽에 해당)recursion(arr, start+tmp*2, tmp)
를 재귀호출한다. (오른쪽에 해당)recursion(arr, 0, 3**n)
을 호출한다.def recursion(arr, start, cur_l):
tmp=cur_l//3
if tmp==0:
return
for i in range(start+tmp, start+tmp*2):
arr[i]=' '
recursion(arr, start, tmp)
recursion(arr, start+tmp*2, tmp)
while True:
try:
n=int(input())
if n=='':
break
arr=['-' for _ in range(3**n)]
recursion(arr, 0, 3**n)
answer=''.join(arr)
print(answer)
except EOFError:
break