2448 - 별 찍기 - 11
📚 2448 - 별 찍기 - 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])
채점 결과
참고 : https://hwiyong.tistory.com/146
Author And Source
이 문제에 관하여(2448 - 별 찍기 - 11), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@chang626/2448-별-찍기-11저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)