2448 - 별 찍기 - 11

LeeKyoungChang·2022년 3월 18일
0

Algorithm

목록 보기
72/203
post-thumbnail
post-custom-banner

📚 2448 - 별 찍기 - 11

별 찍기 - 11

 

이해

  *
 * *
*****

위 별의 모양이 반복해서 출력된 것을 확인할 수 있다.
문제에 나와있는 공식에 따르면 (N = 3 x 2^k)라고 한다.
k가 1일 때는 위 별의 모양이 2개가 추가 되는 것이고
k가 2일 때는 k가 1일 때 모양을 2개 추가한 것을 알 수 있다.
이와 같이 반복된다.

띄어쓰기는
k가 1일 때는 위 별의 모양에서 왼쪽으로 3칸 띄워쓰기가, 위 별의 모양에서 오른쪽 끝은 3칸 띄워지면 된다.
k가 2일 때는 k가 1일 때 모양에서 왼쪽으로 k가 1일 때 결과물에 왼쪽으로 6칸, k가 1일 때 결과물에 (오른쪽에 있을 때) 오른쪽으로 6칸 띄워진다.

결국, k * 3 만큼 띄어지는 것을 알 수 있다.

 

소스

import sys, math

read = sys.stdin.readline

n = int(read())

# s 초기 삼각형
star = ['  *  ', ' * * ', '*****']

# k는 문제에 나와있듯이, 3 x 2^k = N 이라는 것을 알 수 있다.
# k = N / 3 결과의 2의 지수이다.
k = int(math.log(n // 3, 2))


def makeUp(cur_k):
    # star 배열 크기만큼 반복문을 돌리면서 삽입하면 된다.
    cur_len = len(star)

    for i in range(cur_len):
        # k - 1 결과물을 좌, 우로 붙여주면 된다.
        # 층마다 결과물 쌓임
        star.append(star[i] + ' ' + star[i])

        # k가 증가할 수록 3*(k)칸찍 좌우로 빈공간이 생기는 것을 알 수 있다.
        star[i] = (' ' * 3) * cur_k + star[i] + (' ' * 3) * cur_k


# 그림을 보면
# k가 0인 경우, star 1개
# k가 1인 경우, star 3개, star 높이 : 2^1
# k가 2인 경우, star 9개, star 높이 : 2^2
# k가 3인 경우, star 27개, star 높이 : 2^3
# ~
for cur_num in range(k):
    makeUp(int(pow(2, cur_num)))

for i in range(n):
    print(star[i])

 

채점 결과

스크린샷 2022-03-18 오후 11 47 50

 


참고 : https://hwiyong.tistory.com/146

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"
post-custom-banner

0개의 댓글