Python/파이썬 기초

파이썬 별찍기 간결 코딩 예제 : 피라미드, 역삼각형, 다이아몬드, 모래시계

jimmy_AI 2022. 3. 29. 21:51
반응형

파이썬 별찍기 구현 예시

파이썬에서 단 한 줄의 코드로 피라미드, 역삼각형 모양의 별찍기를 구현하고
다이아몬드, 모래시계도 비슷한 원리를 통해서 매우 간결한 코드로 별찍기를 구현한 예제를
다루어보도록 하겠습니다.

정방향 피라미드 모양 별찍기

여기서는 6줄의 별찍기 출력 결과를 기준으로 작성해보도록 하겠습니다.

우선, 피라미드 모양의 각 줄은 아래의 형태의 구성으로 되어있음을 이해해봅시다.

     *       # 공백 5칸 + 별 1개
    ***      # 공백 4칸 + 별 3개
   *****     # 공백 3칸 + 별 5개
  *******    # 공백 2칸 + 별 7개
 *********   # 공백 1칸 + 별 9개
***********  # 공백 0칸 + 별 11개

아래로 한 줄씩 내려갈수록 공백은 1칸씩 줄고, 별은 2개씩 늘어나는 형태입니다.

이 점을 이용하여 i번째 줄(0부터 시작)에서 공백은 5 - i칸, 별은 2 * i + 1개
된다는 점을 이용해서 for문을 작성할 수 있습니다.

또한, 문자열 덧셈의 원리를 통하여 아래의 코드처럼 한 줄로도 별찍기 구현이 가능합니다.

# 피라미드 정방향
for i in range(6):
    print(' ' * (5 - i) + '*' * (i * 2 + 1)) # 공백 개수 + 별 개수 매칭
    
# 코드를 한 줄로 나타낸 경우
for i in range(6): print(' ' * (5 - i) + '*' * (i * 2 + 1))


역방향 피라미드(역삼각형) 모양 별찍기

마찬가지로, 이번에는 피라미드를 뒤집은 역삼각형 모양의 별찍기 예시를 살펴보겠습니다.

***********  # 공백 0칸 + 별 11개
 *********   # 공백 1칸 + 별 9개
  *******    # 공백 2칸 + 별 7개
   *****     # 공백 3칸 + 별 5개
    ***      # 공백 4칸 + 별 3개
     *       # 공백 5칸 + 별 1개

이번에는 거꾸로 아래로 내려갈수록 공백은 1칸씩 증가, 별은 2개씩 감소하고 있습니다.

i번째 줄(0부터 시작) 입장에서 살펴보면 공백은 i칸, 별은 11 - 2 * i개가 되고 있습니다.

반응형

정방향 피라미드와 같은 원리로 별찍기 코드를 작성하면 아래와 같습니다.

# 피라미드 역방향
for i in range(6):
    print(' ' * i + '*' * (11 - (2 * i))) # 공백 개수 + 별 개수 매칭

# 코드를 한 줄로 나타낸 경우
for i in range(6): print(' ' * i + '*' * (11 - (2 * i)))


다이아몬드, 모래시계 모양 별찍기

정방향과 역방향 피라미드 모양의 별찍기 원리를 이해하셨다면
다이아몬드와 모래시계 모양의 별찍기 구현도 매우 간단해집니다.

다이아몬드는 정방향 피라미드 출력 후, 역방향 피라미드를 출력하면 되고,
모래시계는 반대로 역삼각형 출력 후, 정방향 피라미드 모양을 출력해주면 됩니다.

실제 다이아몬드와 모래시계의 별찍기를 파이썬에서 구현한 결과는 아래와 같았습니다.

# 다이아몬드 (정방향 + 역방향)

for i in range(6): # 정방향
    print(' ' * (5 - i) + '*' * (i * 2 + 1))
for i in range(6): # 역방향
    print(' ' * i + '*' * (11 - (2 * i)))

# 출력 결과
     *
    ***
   *****
  *******
 *********
***********
***********
 *********
  *******
   *****
    ***
     *
# 모래시계 (역방향 + 정방향)

for i in range(6): # 역방향
    print(' ' * i + '*' * (11 - (2 * i)))
for i in range(6): # 정방향
    print(' ' * (5 - i) + '*' * (i * 2 + 1))

# 출력 결과
***********
 *********
  *******
   *****
    ***
     *
     *
    ***
   *****
  *******
 *********
***********