별 패턴 출력 코드의 구조적 개선 분석
1. 문제 접근 방식
주어진 문제는 정수 N에 대해, 상하 대칭을 이루는 별 패턴을 출력하는 것이다.
출력 구조는 중앙을 기준으로 대칭이며, 각 행에서 다음 두 요소가 핵심이 된다.
- 공백의 개수
- 별의 개수
패턴의 본질은 “행 번호에 따라 공백은 감소하고 별은 증가한다”는 규칙이며, 이후 동일한 규칙이 역순으로 반복된다.
2. 기존 구현 (코드1)
N = int(input())
for i in range(1, N+1):
spaces = " " * (N-i)
stars = "*" * (i*2-1)
print(spaces + stars)
for i in range(1, N):
spaces = " " * i
stars = "*" * ((N-i)*2-1)
print(spaces + stars)
2.1 특징
기존 구현은 패턴을 두 개의 구간으로 분리한다.
- 증가 구간 (상단)
- 감소 구간 (하단)
각 구간은 서로 다른 수식을 사용하여 별과 공백을 계산한다.
2.2 수식 구조
상단 구간
spaces = N - i
stars = 2*i - 1
하단 구간
spaces = i
stars = 2*(N - i) - 1
즉, 동일한 패턴임에도 불구하고 서로 다른 두 개의 계산 방식이 사용된다.
2.3 한계
- 동일한 패턴을 두 번 정의해야 한다
- 코드 중복이 발생한다
- 대칭 구조가 코드에서 직접적으로 드러나지 않는다
- 수정 시 두 구간을 모두 고려해야 한다
3. 개선된 구현 (코드2)
n = int(input())
for i in range(1, n):
print(' '*(n-i) + '*'*(2*i-1))
for i in range(n, 0, -1):
print(' '*(n-i) + '*'*(2*i-1))
4. 구조적 개선 분석
4.1 수식의 통일
개선된 코드에서는 하나의 수식만 사용한다.
spaces = n - i
stars = 2*i - 1
모든 출력이 이 하나의 규칙으로 생성된다.
4.2 반복 방향을 통한 대칭 구현
대칭 구조는 별도의 수식이 아니라 반복문의 방향으로 처리된다.
- 증가 구간: i = 1 → n-1
- 감소 구간: i = n → 1
즉, 수식을 바꾸지 않고 i의 순서만 뒤집어 대칭을 구현한다.
4.3 경계값 처리
중앙 줄(i = n)은 한 번만 출력되어야 한다.
- 첫 번째 반복문: 1 ≤ i < n
- 두 번째 반복문: n ≥ i ≥ 1
이 구조를 통해 별도의 조건문 없이 중복 출력이 방지된다.
4.4 중복 제거 및 추상화
기존 코드는 “구간별 구현” 방식이었다면,
개선된 코드는 “하나의 패턴을 재사용”하는 방식이다.
이로 인해 다음과 같은 변화가 나타난다.
- 수식 중복 제거
- 코드 길이 감소
- 구조적 일관성 확보
- 가독성 향상
5. 결론
코드1에서 코드2로의 변화는 단순한 코드 축약이 아니라,
패턴을 하나의 규칙으로 통합한 구조적 개선 과정이다.
핵심 변화는 다음과 같다.
- 서로 다른 수식을 하나로 통합
- 반복 방향을 이용한 대칭 구조 구현
- 경계값을 자연스럽게 처리
- 코드 중복 제거
결과적으로 코드2는 동일한 기능을 수행하면서도
더 단순하고 일관된 구조를 가지는 구현이다.
'Univ > Python Programming' 카테고리의 다른 글
| [문제 08]숫자의 합 구하기 - Python 풀이 (0) | 2026.04.15 |
|---|---|
| [문제 07] 배열에서 최대값과 최소값 찾기 - Python 풀이 (0) | 2026.04.15 |
| [문제 06] X 모양 별 그리기 - Python 풀이 (1) | 2026.04.09 |
| [문제 05] 별로 세모 그리기 - Python 풀이 (0) | 2026.04.09 |
| 파이썬의 변수와 기본 자료형 실습 (0) | 2026.04.08 |