jyamethyst21 님의 블로그

백준 2522번- '별 찍기 - 12' (PYTHON 풀이) 본문

CODING 💻

백준 2522번- '별 찍기 - 12' (PYTHON 풀이)

jyamethyst21 2025. 12. 30. 00:28

문제:

 

오랜만에 별찍기 문제를 가지고 왔다. 되게 유형이 많은 것 같다.

이번 문제는 피라미드 + 역피라미드 모양인데 반으로 잘라진 형태이다.

 

풀이:

N = int(input())
b = N - 1

for i in range(1, N+1):
    print(" " * b + "*" * i)
    b = b - 1

b = 1
for i in range(N-1, 0, -1):
    print(" " * b + "*" * i)
    b = b + 1

입력값을 받고, 공백을 담을 b 변수에 입력값 - 1만큼 넣어준다. 예제 출력을 보면 입력값 - 1 만큼 공백이 들어가고 그 다음 1만큼 별이 찍히고 있기 때문에 우선 공백을 저렇게 계산해서 선언해주었다.

그 다음 반복문을 돌건데, 반복문에서 i는 별을 찍어주는 역할을 하기 때문에 예제 출력과 같이 첫번째 줄엔 1개만 찍히므로 1부터 찍힐 수 있게 시작 조건을 1부터 N+1까지로 넣어주었다.(종료는 N까지 돌도록 함)

그러면 입력값이 3일 때, (빈칸 2개 + 별 한개), (빈칸 1개 + 별 두개), (빈칸 0개 + 별 3개) 형태로 찍히게 된다. 첫번째 반복문을 돌면 역피라미드 모양 3줄이 완성될 것이다. (예제 출력 기준)

그 다음은 역피라미드 모양을 만들어줄건데, 이때 b는 무조건 1일 것이다. 입력값이 3이든 4든 그 이상이든간에 역피라미드 모양이 찍히기 시작하는 라인은 무조건 공백이 1개만 있으므로 b를 다시 1로 초기화해서 두번째 반복문을 실행한다.

이때 시작 조건은 N-1로 해주어서 별 모양을 N-1개만 찍히도록 한다. 그 다음 별을 1까지 찍고 있기 때문에 1까지 돌도록 종료를 0으로 두고 증감값을 -1로 작성한다. 그러면 두번째 반복문에서는 입력값이 3일 때, (빈칸 1개 + 별 2개), (빈칸 2개 + 별 1개) 형태로 찍히게 될 것이다.