BOJ 2447 별찍기 - 10 python

가나다·2023년 7월 19일
0

알고리즘

목록 보기
3/14
post-thumbnail

문제: https://www.acmicpc.net/problem/2447


예제 입력

접근1

3,9,27... 짜리 패턴의 별을 만들고 패턴의 크기 단위로 리스트를 추가하는 방식으로 하려 했음

3패턴

9패턴

27패턴

3^n 패턴에 대해 3^(n-1) 패턴을 이용하여
(빨강) 1층에 패턴 x3
(주황) 2층에 패턴, 패턴 크기만큼의 공백 추가, 패턴
(노랑) 3층에 패턴 x3
이렇게 문제를 해결하려 했으나 재귀로 별찍기를 해보려 했는데 여태껏 반복문으로 하다가
재귀 호출로 하려니까 구상이 안됨...
반복문으로 해결하면 의미가 없어서 답지를 참고하기로 했음

답지확인

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)))

출저:https://cotak.tistory.com/38

위의 블로그에 2가지 방식이 설명되어 있는데 내 방식은 둘 다 섞인 거 같음
답을 보고 생각하니 내가 생각한 방법은 굳이 층을 나눌 필요가 없었음
그리고 9번을 나눠 출력하는 것보다 위의 방식으로 하는 것이 좀 더 좋다고 설명되어 있어서
해당 블로그가 이 문제를 해결하는 데 많은 도움이 됐다
문제는 층을 나누고 위의 코드처럼 패턴을 이용하며 한 줄씩 추가하는 방식으로 해결함

profile
가나다

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

유익한 정보를 제공해주셔서 감사합니다.

답글 달기