jyamethyst21 님의 블로그
백준 2446번- '별 찍기 - 9' (PYTHON 풀이) 본문
문제:

오랜만에 별찍기 문제를 가지고 왔다.
역피라미드+피라미드 모양인데, 이번에도 역시 규칙을 찾아야 쉽게 풀 수 있다.


필자는 쉽게 생각해서 앞서 말한 것처럼 역피라미드+피라미드 모양이니까 두개로 나눠서 별을 찍자고 생각했다. 즉, 역피라미드 모양인 맨 윗줄부터 별이 한개만 찍히는 곳까지 찢어서 코드를 짜고, 나머지 별이 3개부터 시작되는 부분을 피라미드 모양으로 잡고 찢어서 총 for문을 두개썼다. 물론 더 짧게 풀 수도 있을 것 같다.
먼저, 역피라미드 모양을 보면 별의 개수가 2*N-1개에서 시작해서 2개씩 줄어들고있다. 그리고 그 줄어든 별의 위치에는 공백이 입력된다.
반대로 피라미드 모양은 별의 개수가 1부터 시작해서 2*N-1까지 2개씩 늘어나고 있다. 이 두가지를 코드를 두개로 나눠서 공백을 찍는 변수 따로, *을 찍는 변수를 따로(for문의 i,j) 두고 print문을 작성하면 된다.
이렇게 설명하면 이해가 힘들 수 있으니 바로 코드를 가지고 와보겠다.
풀이:
N = int(input())
b = 0
for i in range(N*2-1, 0, -2):
print(" " * b + "*" * i)
b += 1
b -= 2
for j in range(3, N*2+1, 2):
print(" " * b + "*" * j)
b -= 1
우선 필자는 b를 공백의 개수를 담는 변수로 선언하였다.
그리고 반복문을 돌려서 앞서 말한 것처럼 별의 개수는 N*2-1부터 시작되니까 시작을 그렇게 잡고 2개씩 줄어드니까 증감수를 -2로 두어서 반복문을 돌렸다. 여기서 for문은 별을 찍기 위한 로직이고 i가 별 개수를 의미한다.
그 다음 i, b를 이용해서 프린트문을 작성한다. b가(공백) 첫번째줄에서는 0개 그 다음부터는 1씩 늘어나기 때문에 프린트문을 적은 뒤에 반드시 +1을 해준다. 이렇게 반복하면 별의 개수가 N*2-1부터 1까지 찍히는 로직이 완성되고 역피라미드 모양이 출력된다.
그 다음 피라미드 부분을 그리기 위해 b를 -2 해준다. 왜냐하면 아래쪽 첫 줄의 별 개수는 항상 3개, 즉 윗부분 마지막 줄보다 별이 2개 증가하므로 공백이 1칸 줄어들어야 하고, 또 한 줄 내려가므로 총 2칸 줄어들어야 하기 때문이다.
그 후 별이 3개부터 시작되는 피라미드 모양을 만들어줘야한다. 그래서 마찬가지로 for문을 적고 이번엔 별이 3개부터 시작되니 3부터 시작해서 N*2-1까지 찍히도록 끝 수를 정하고(N*2+1으로 적어야 N*2-1이 됨) 이번엔 2개씩 늘어나므로 +2를 증감수로 두어 반복문을 돌린다.
그러면 아래와 같이 예쁘게 결과가 출력된다. (N이 5일 시)

'CODING 💻' 카테고리의 다른 글
| 백준 7287번- '등록' (PYTHON 풀이) (0) | 2025.11.29 |
|---|---|
| 백준 5585번- '거스름돈' (PYTHON 풀이) (0) | 2025.11.28 |
| 백준 2748번- '피보나치 수 2' (PYTHON 풀이) (0) | 2025.11.26 |
| 백준 10845번- '큐' (PYTHON 풀이) (0) | 2025.11.25 |
| 백준 11721번- '열 개씩 끊어 출력하기' (PYTHON 풀이) (0) | 2025.11.24 |
