[BOJ] 별 찍기 10

Minsu Han·2022년 12월 7일
0

알고리즘연습

목록 보기
60/105

코드

from sys import stdin
input = stdin.readline

N = int(input())

def recursion(n):
    if n == 1:
        return ['*']
    subStar = recursion(n//3)
    l = []
    for s in subStar:
        l.append(s*3)
    for s in subStar:
        l.append(s + ' '*(n//3) + s)
    for s in subStar:
        l.append(s*3)

    if n == N: print('\n'.join(l))
    return l
    
recursion(N)

결과


풀이 방법

  • 이 문제의 경우 문제를 9개의 subproblem으로 나누는 것보다는, 전체 문제를 3개 줄의 subproblem으로 나누어서 해결하는 것이 빠르고 구현이 쉽다.
  • 탈출 조건은 n == 1 일 때이고 별 1개를 리스트에 담아 리턴한다.
  • recursion(n)은 크기 n의 별의 각 줄(총 3개)에 해당하는 별 문자열을 list에 append한 형태로 만들어서 리턴하는데, 이때 각 줄에서 사용되는 작은 별은 recursion(n//3)이 크기 n//3의 별을 만들어서 리턴한 list에서 얻는다.
  • 최종적으로 n == N인 경우 list의 요소들을 개행문자로 join하여 출력한다.

profile
기록하기

0개의 댓글