1. 문제
2. 설명
이번 문제는 내가 접한 재귀 문제 중 가장 어려웠던 것 같다.
고민해봐도 해답이 보이지 않았고, 결국 정답을 찾아보기 시작했다. 코드를 이해하는데에도 시간을 좀 쏟았다..^^7
해당 블로그의 코드를 보며 이해하였다!
https://lucian-blog.tistory.com/57
재귀 함수를 호출하면서 n이 1이 되면 ['*']가 리턴되므로, n이 3일 때 Stars = draw_stars(3//3) = ['*'] 가 된다.
L = [] 인 상태에서 for문에 들어간다.
첫번째 for문을 지나면 L = ['***'], 두번째 for문을 지나면 L = ['***' , '* *'], 세번째 for문을 지나면 L = ['***','* *','***']가 된다
L이 리턴되므로 n이 9일 때 Stars = draw_stars(9//3) = ['***','* *','***']가 된다.
또 다시 세 개의 for문을 지나면
L = ['*********',
'* ** ** *',
'*********',
'*** ***',
'* * * *',
'*** ***',
'*********',
'* ** ** *',
'*********']
가 된다.
이와 같은 과정으로 N까지 반복한다면,
'\n'.join(draw_stars(N)) 을 통해 원하는 모습을 출력해줄 수 있다.
만약 print(draw_stars(N)을 한다면 배열의 모습 그대로 출력된다.
3. 코드
def draw_stars(n):
if n==1:
return ['*']
Stars=draw_stars(n//3)
L=[]
for star in Stars:
L.append(star*3)
for star in Stars:
L.append(star+' '*(n//3)+star)
for star in Stars:
L.append(star*3)
return L
N=int(input())
print('\n'.join(draw_stars(N)))
'코딩테스트(python) > 백준' 카테고리의 다른 글
백준 2750번 파이썬 (0) | 2022.09.12 |
---|---|
백준 11829번 파이썬 (0) | 2022.09.12 |
백준 17478번 파이썬 (0) | 2022.09.06 |
백준 10870번 파이썬 (0) | 2022.09.05 |
백준 10872번 파이썬 (0) | 2022.09.05 |