Published:
Updated:

  • 생각할 게 많은 분할 정복 문제


Solution

import sys
from typing import List


def solution(N: int) -> List[str]:
    answer: List[str] = []
    star = ["***", "* *", "***"]
    cnt = 0

    while N > 3:
        N /= 3
        cnt += 1

    for _ in range(cnt):
        # 만들어진 현재의 별 모양을 기반으로 계속 다음 단계의 별 모양을 생성
        # 이때 당연히 3배가 늘어나게 됨
        star = make_star(star)

    return star


def make_star(star) -> List[str]:
    tmp_star = []

    # 별을 3배로 확장해서 새로운 패턴 생성
    for i in range(3 * len(star)):
        current_length = len(star)

        if i // current_length == 1:
            tmp_star.append(
                star[i % current_length] +
                # 공백을 삽입해서 패턴 확장
                " " * current_length +
                star[i % current_length]
            )
            continue

        tmp_star.append(star[i % current_length] * 3)

    return tmp_star


N = int(sys.stdin.readline().rstrip())
print(*solution(N), sep='\n')


Reference

Leave a comment