1. 문제 설명


2. 코드
def draw_star(n):
if n == 1:
return ['*']
prev = draw_star(n//3)
result = []
for p in prev:
result.append(p*3)
for p in prev:
result.append(p+' '*(n//3)+p)
for p in prev:
result.append(p*3)
return result
n = int(input())
print('\n'.join(draw_star(n)))
3. 풀이 과정
재귀 패턴의 흐름은 다음과 같다.
N이 3이상일 때, 이전 패턴을 그대로 받아서 다음 패턴으로 진행하게 된다.
따라서 최초 패턴 n = 1일 때부터 받아서 쌓아가는 재귀 함수를 만들어야 한다.
재귀 함수 draw_star(1)일 때, 별 ['*']을 넣는다.
draw_star(3)을 보면 prev에 draw_star(1), 별을 받아서 한줄씩 패턴을 찍어 result에 넣는다.
***
* *
***
위와 같이 패턴이 나오지만, result에는 ['***',"* *','***']로 저장된다.
N이 9라면 draw_star(3)을 prev에 받아서 반복한다.
draw_star(9)를 구하기 위해 draw_star(3)을 구하고
draw_star(3)을 구하기 위해 draw_star(1)을 구하는 것이다.
N이 커질 수록 이 과정이 늘어난다.
한 줄로 이루어진 패턴을 출력할 때는 줄바꿈 '\n\으로 구분짓고, join()으로 이어서 출력한다.
반응형
'Baekjoon(Python) > 단계별로 풀어보기(Python)' 카테고리의 다른 글
| [백준][20단계 백트래킹] 15649번 /N과 M (1) (파이썬/Python) (0) | 2025.10.24 |
|---|---|
| [백준][19단계 재귀] 11729번 /하노이 탑 이동 순서 (파이썬/Python) (0) | 2025.10.23 |
| [백준][19단계 재귀] 4779번 /칸토어 집합 (파이썬/Python) (0) | 2025.10.21 |
| [백준][19단계 재귀] 24060번 /알고리즘 수업 - 병합 정렬 1 (파이썬/Python) (0) | 2025.10.20 |
| [백준][19단계 재귀] 25501번 /재귀의 귀재 (파이썬/Python) (0) | 2025.10.17 |