2025. 10. 22. 13:01 Baekjoon(Python)/단계별로 풀어보기(Python)

Baekjoon(Python)/단계별로 풀어보기(Python)

[백준][19단계 재귀] 2447번 /별 찍기 - 10 (파이썬/Python)

junslee 2025. 10. 22. 13:01

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()으로 이어서 출력한다.

반응형