Hanbit the Developer

[Python] 백준 2448번: 별 찍기 - 11 본문

Algorithm/백준

[Python] 백준 2448번: 별 찍기 - 11

hanbikan 2021. 7. 18. 15:00

https://www.acmicpc.net/problem/2448

 

2448번: 별 찍기 - 11

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)

www.acmicpc.net

import sys
input = sys.stdin.readline


def printStar(N):
    curStar = [
        "  *   ",
        " * *  ",
        "***** "]
    curLen = 3

    while curLen < N:
        for i in range(curLen):
            curStar.append(curStar[i]*2)
            curStar[i] = " "*curLen + curStar[i] + " "*curLen

        curLen *= 2

    for s in curStar:
        print("".join(s))


if __name__ == '__main__':
    N = int(input())
    printStar(N)

 

 

패턴을 분석하면 다음과 같다.

 

 

1. 아래의 별 모양으로 시작한다.

  *

 * *

*****

 

2. 크기가 N인 별 피라미드를 N*2로 늘린다고 했을 때,

    - 기존의 피라미드를 2번 복사한 것이 새로 추가된다.

    - 기존의 피라미드에 공백이 추가된다. 이 때 뒤에도 공백을 추가해야한다.

 

여기에 맞게 코드 작성을 해주면 된다.