https://www.acmicpc.net/problem/2448
import sys
input=sys.stdin.readline
N=int(input())
stars=[' * '," * * ","*****"]
def recur(k,starsNext):
if k==N:
for i in range(len(starsNext)):
print(starsNext[i])
return
else:
new_stars=[]
for i in range(len(starsNext)):
new_stars.append(" "*k+starsNext[i]+" "*k)
for i in range(len(starsNext)):
new_stars.append(starsNext[i]+" "+starsNext[i])
recur(k*2,new_stars)
recur(3,stars)
결과를 누적해가면서 재귀를 진행시키는게 가장 핵심이다. 즉 현재 삼각형은 다음 삼각형의 3개 중 하나가 되기 때문에 이를 이용하면 간단하다.
먼저 각 줄마다 삼각형의 띄어쓰기를 반영해야하므로 제일 작은 삼각형을 각 줄마다 리스트에 넣고 시작한다. 그렇게 만들어가다가 마지막 즉 우리가 원하는 값인 N에 도달하면 출력하면 된다. 그렇지 않은 경우, 이전 삼각형 3개로 현 삼각형을 만들어서 재귀로 다음 단계로 넘기면 된다. 이는 첫번째 삼각형에서 앞 뒤로 빈칸을 추가하고 나머지 두 개 삼각형(즉, 밑에 있는 두개)를 붙이면 된다.
이렇게 Python로 백준의 "별 찍기 - 11" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊