jyamethyst21 님의 블로그

백준 2445번- '별 찍기 - 8' (PYTHON 풀이) 본문

CODING 💻

백준 2445번- '별 찍기 - 8' (PYTHON 풀이)

jyamethyst21 2025. 12. 5. 00:42

문제:

다른 유형의 별찍기 문제를 가지고 왔다.

조금 특이한 모양이긴 하지만 이전에 풀었던 별찍기 - 9를 참고하면 쉽게 풀 수 있다.

https://jyamethyst21.tistory.com/108

 

우선 피라미드 + 역피라미드를 붙인 모양인데 붙일 때 세로로 절반을 뚝 잘라서 만든 모양이다. 필자는 별찍기 - 9 문제를 풀었을 때와 동일하게 피라미드 모양 코드 따로, 역피라미드 모양 코드 따로 작성하여 붙이도록 하겠다.

 

이렇게 피라미드 모양을 살펴보면 우선 가장 별이 많이 찍힌 마지막 줄의 별 개수가 N * 2인 것을 알 수 있다. 그리고 첫번째 줄의 별의 개수는 2로 다음줄은 2의 배수씩 별의 개수가 늘어나고 있다.

그리고 별 개수 사이에는 공백이 자리 잡고 있다. 이는 공백을 저장하는 변수를 따로 저장해서 일정 규칙에 따라 '* + 공백 + *' 순으로 별을 출력하면 된단 얘기이다. 이때 공백을 찍는 변수 역시 일정 규칙에 따라 감소시켜줘야 한다.

 

다음은 역피라미드 모양이다 역피라미드 모양에서 역시 피라미드 모양처럼 규칙을 구하면 된다.

그 윗줄을 보면(피라미드 모양의 마지막 줄) 별이 N * 2만큼 찍혀있고 이번엔 반대로 2개씩 줄어들고 있다. 그리고 그 사이는 공백이 자리잡고 있다. 이 역시 규칙을 찾아서 '*' + 공백 + '*' 순으로 프린트하면 우리가 원하는 모양대로 출력이 된다.

 

풀이:

N = int(input())
b = N * 2 - 2

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

규칙을 찾아서 코드를 작성하면 위와 같다.

첫번째 for문은 피라미드, 두번째 for문은 역피라미드 작성 코드이다.

피라미드 모양은 우선 별 1개 + N * 2 - 2개의 공백 + 별 1개가 찍히고 이후 별이 한개씩 늘어나고 공백은 2개씩 줄고있다.

이러한 규칙을 그대로 코드로 작성하면 위와 같다.

 

반대로 역피라미드 모양을 살펴보면 첫 줄은 N-1개의 별 + 공백 + N-1개의 별이 찍히고 있고 이후엔 별이 2개씩 줄고 공백은 2씩 늘고있다. 이 역시 코드로 작성하면 두번째 for문과 같다.

 

아, 그리고 해당 코드에서 주의할 점은 각 피라미드 코드 사이에 공백의 개수인 b를 초기화 해주어야 한다는 점이다.

당연하다. 첫번째 반복문이 끝난 다음에 b는 0일 것이다. 그러니 다시 2로 초기화해주고 역피라미드 모양도 작성해야 한다!