본문 바로가기

Univ/Python Programming

[백준-2444] 별 찍기 - 7 코드 개선 - Python 풀이

별 패턴 출력 코드의 구조적 개선 분석

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 특징

기존 구현은 패턴을 두 개의 구간으로 분리한다.

  1. 증가 구간 (상단)
  2. 감소 구간 (하단)

각 구간은 서로 다른 수식을 사용하여 별과 공백을 계산한다.


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로의 변화는 단순한 코드 축약이 아니라,
패턴을 하나의 규칙으로 통합한 구조적 개선 과정이다.

핵심 변화는 다음과 같다.

  1. 서로 다른 수식을 하나로 통합
  2. 반복 방향을 이용한 대칭 구조 구현
  3. 경계값을 자연스럽게 처리
  4. 코드 중복 제거

결과적으로 코드2는 동일한 기능을 수행하면서도
더 단순하고 일관된 구조를 가지는 구현이다.