[BOJ/백준] 2447 - Python

이정은·2023년 2월 21일
0

BOJ Collector

목록 보기
1/1
post-thumbnail
post-custom-banner

Problem 💻

Example

Solution 🔥

  • 문제 초반에 "재귀적인 패턴으로 별을 찍어 보자"라고 적혀있다
    이에 재귀함수로 이 문제를 풀려고 하니 도저히 풀리지 않아 다른 코드를 보고 이를 이해하는데에 목적을 두었다.

    다음 그림은 오랜만에 재귀를 풀어 봤길래 정리하는겸 어떤식으로 재귀함수가 돌아가는지 순서를 적어봤다.
    n = 27 의 경우이다.
    star(27)의 함수를 처음 호출하고 함수 내에서 star(9) 호출, star(3)호출, star(1) 호출이 되고 star(1) 함수가 가장 먼저 반환되고 그다음 차례대로 star(3), star(9), star(27)이 반환된다.

그렇다면 재귀에서 가장 중요하게 생각해야하는 건 무엇일까?

  1. 어디가 끝인가? => 여기서는 n = 1이 되는 경우이다 이때 반환 되는 것이 최소 단위가 된다는 것 또한 중요하다

  2. 어떻게 반복되는가?
    여기서는 밑의 코드에서와 같이 for문을 참고하면 어떠한 반복이 이루어지는지 알수 있을 것이다. 대충 퉁쳐서 말하자면 이 문제는 "*3" 이라고 할수있겠다.(정확한 반복은 for문과 이미지 참고)

Code

def star(n):
    if n == 1:
        return ['*']
    stars = star(n//3)
    li = []

    for s in stars:
        li.append(s*3)
    for s in stars:
        li.append(s+' '*(n//3)+s)
    for s in stars:
        li.append(s*3)
    return li

n = int(input())
print('\n'.join(star(n)))

출처

https://lucian-blog.tistory.com/57

profile
성장하는 개발자_💻
post-custom-banner

0개의 댓글