본문 바로가기

코딩테스트(python)/백준

백준 2447번 파이썬

반응형

1. 문제

2. 설명

이번 문제는 내가 접한 재귀 문제 중 가장 어려웠던 것 같다. 

고민해봐도 해답이 보이지 않았고, 결국 정답을 찾아보기 시작했다. 코드를 이해하는데에도 시간을 좀 쏟았다..^^7

해당 블로그의 코드를 보며 이해하였다!

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

 

[백준 2447번] 별 찍기 - 10 in python

문제 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에

lucian-blog.tistory.com

이해하기 위해 노트에 그려본 흔적..지저분..ㅎ


재귀 함수를 호출하면서 n이 1이 되면 ['*']가 리턴되므로, n이 3일 때 Stars = draw_stars(3//3) =  ['*'] 가 된다.

L = [] 인 상태에서 for문에 들어간다. 

첫번째 for문을 지나면 L = ['***'], 두번째 for문을 지나면 L = ['***' , '* *'], 세번째 for문을 지나면 L = ['***','* *','***']가 된다

n = 3

L이 리턴되므로 n이 9일 때 Stars = draw_stars(9//3) =  ['***','* *','***']가 된다.

또 다시 세 개의 for문을 지나면

L = ['*********',

        '* ** ** *',

        '*********',

         '***   ***',

         '* *   * *',

        '***   ***',

       '*********',

        '* ** ** *', 

        '*********']

가 된다. 

n = 9

이와 같은 과정으로 N까지 반복한다면,

'\n'.join(draw_stars(N)) 을 통해 원하는 모습을 출력해줄 수 있다.

n = 27

만약 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