본문 바로가기

Univ/Python Programming

[문제 03] 별로 피라미드 그리기 - Python 풀이

정수 N이 주어지면 높이가 N인 가운데 정렬 별 피라미드를 출력하는 프로그램을 작성한다. i번째 줄에는 앞에 공백이 N-i개, 별이 2*i-1개 출력되어야 한다.

입력

첫째 줄에 정수 N이 주어진다. (0 <= N <= 10)

출력

높이가 N인 가운데 정렬 별 피라미드를 출력한다.

 

다음 문제는 단순한 반복 출력에서 한 단계 나아가, 공백과 별의 개수를 동시에 제어하여 대칭 구조를 형성하는 출력 문제이다. 특히 “가운데 정렬”이라는 조건이 추가되면서, 각 행마다 두 종류의 문자열을 조합해야 한다는 점이 핵심이다.

N=int(input())

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

1. 문제의 형식적 정의

각 행 ( i ) (1 ≤ ( i ) ≤ ( N ))에 대해 다음이 성립한다:

  • 앞쪽 공백의 개수: ( N - i )
  • 별의 개수: ( 2i - 1 )

따라서 각 행은 다음과 같은 구조를 갖는다:

[
\text{공백}(N-i) + \text{별}(2i-1)
]

이 규칙을 ( i = 1 )부터 ( N )까지 반복하면, 가운데 정렬된 피라미드 형태가 완성된다.


2. 프로그램 구성

N = int(input())

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

3. 구성 요소별 문법 해설

3.1 입력 처리

N = int(input())
  • input()은 문자열을 반환하며, int()를 통해 정수형으로 변환한다.
  • 변수 N은 전체 출력의 높이를 결정하는 기준 값이다.

3.2 반복 제어 구조

for i in range(1, N + 1):
  • range(1, N+1)은 1부터 ( N )까지의 정수 수열을 생성한다.
  • 반복 변수 i는 현재 출력 중인 행 번호를 의미한다.

3.3 공백 생성

spaces = " " * (N - i)
  • 문자열 " "(공백)을 ( N - i )번 반복하여 생성한다.
  • 이는 출력의 좌측 여백을 형성하며, 결과적으로 별이 가운데에 위치하도록 만든다.

3.4 별 생성

stars = "*" * (2 * i - 1)
  • 문자열 "*"을 ( 2i - 1 )번 반복하여 생성한다.
  • 별의 개수가 홀수로 증가함으로써 좌우 대칭 구조가 형성된다.

3.5 출력

print(spaces + stars)
  • 공백 문자열과 별 문자열을 연결(concatenation)하여 한 줄로 출력한다.
  • print()는 자동으로 줄바꿈을 수행한다.

4. 실행 과정 예시

입력값이 ( N = 3 )일 경우:

i공백 (N-i)별 (2i-1)출력

1 2 1 *
2 1 3 ***
3 0 5 *****

최종 출력:

  *
 ***
*****

5. 핵심 개념 정리

이 문제는 다음 세 가지 요소의 결합으로 구성된다.

  1. 행 번호 기반 반복: for i in range(1, N+1)
  2. 좌측 정렬 보정을 위한 공백 생성: " " * (N - i)
  3. 대칭 구조를 위한 홀수 개 별 생성: "*" * (2*i - 1)

6. 결론

본 문제는 단순 반복 출력에서 확장된 형태로,
각 행마다 **서로 다른 두 종류의 문자열(공백, 별)**을 조합하여
시각적 대칭 구조를 형성하는 방식을 이해하는 데 목적이 있다.

특히 다음 관계식은 문제 해결의 핵심이다:

[
\text{공백} = N - i,\quad \text{별} = 2i - 1
]

이 관계를 정확히 구현하면, 가운데 정렬된 피라미드를 안정적으로 생성할 수 있다.