본문 바로가기

파이썬(문제풀이)

파이썬 정삼각형 별찍기

더보기

제시된 Python 코드는 정삼각형 모양의 별을 출력하는 프로그램이다. 코드는 두 개의 중첩된 for 반복문을 사용하여 각 줄에 필요한 **공백( )**과 **별(*)**의 개수를 제어한다.

#1: 일반적인 중첩 반복문 사용

 

rows = 8  
for i in range(rows):
    for j in range(rows - i - 1):
        print(" ", end="")
    for k in range(2 * i + 1):
        print("*", end="")
    print()

 


코드 분석

1. rows = 8

  • rows 변수는 삼각형의 전체 높이를 결정합니다. 여기서는 8줄짜리 삼각형을 만듭니다. 이 값을 변경하면 삼각형의 크기를 조절할 수 있습니다.

2. for i in range(rows):

  • 외부 반복문으로, i는 현재 출력할 줄의 번호(0부터 시작)를 나타냅니다. 이 반복문은 i가 0에서 7까지 총 8번 실행되어 8개의 줄을 만듭니다.

3. 첫 번째 중첩 반복문: 공백 출력

  • for j in range(rows - i - 1):
    • 이 반복문은 각 줄 앞에 공백을 출력합니다.
    • rows - i - 1은 현재 줄 번호(i)에 따라 공백의 개수를 계산합니다.
      • i = 0 (첫째 줄): 8 - 0 - 1 = 7개의 공백 출력
      • i = 1 (둘째 줄): 8 - 1 - 1 = 6개의 공백 출력
      • ...
      • i = 7 (마지막 줄): 8 - 7 - 1 = 0개의 공백 출력
    • 줄 번호가 증가할수록 공백의 개수가 하나씩 감소하여 별이 중앙에 오도록 합니다.
    • print(" ", end="")는 공백을 출력한 후 줄바꿈을 하지 않고 다음 내용이 바로 이어서 출력되도록 합니다.

4. 두 번째 중첩 반복문: 별 출력

  • for k in range(2 * i + 1):
    • 이 반복문은 각 줄에 을 출력합니다.
    • 2 * i + 1은 현재 줄 번호(i)에 따라 별의 개수를 계산합니다.
      • i = 0 (첫째 줄): 2 * 0 + 1 = 1개의 별 출력
      • i = 1 (둘째 줄): 2 * 1 + 1 = 3개의 별 출력
      • i = 2 (셋째 줄): 2 * 2 + 1 = 5개의 별 출력
      • ...
      • i = 7 (마지막 줄): 2 * 7 + 1 = 15개의 별 출력
    • 별의 개수가 홀수로 1, 3, 5, ... 순서로 증가하여 정삼각형 모양을 만듭니다.
    • print("*", end="")는 별을 출력한 후 줄바꿈을 하지 않고 공백과 마찬가지로 이어서 출력합니다.

5. print()

  • 두 개의 중첩 반복문이 끝난 후 줄바꿈을 수행합니다. 이로 인해 다음 줄의 공백과 별이 새로운 줄에 출력됩니다.

결과적으로, 이 코드는 줄마다 공백의 개수를 줄이고 별의 개수를 늘려가면서 최종적으로 이미지와 같은 정삼각형 모양을 만듭니다.


더보기

파이썬의 문자열 기능을 활용하면 코드를 훨씬 간결하게 만들 수 있다. 문자열을 숫자로 곱하면 해당 문자열이 반복되고, .center() 메서드를 이용해 문자열을 중앙 정렬할 수 있다.

# 2: 문자열 곱셈 및 중앙 정렬 활용

rows = 8

for i in range(rows):
    stars = "*" * (2 * i + 1)
    print(stars.center(2 * rows - 1))

 


코드 분석

1. rows = 8

  • **rows**는 삼각형의 높이를 결정하는 변수입니다. 여기서는 8줄짜리 삼각형을 만듭니다.

2. for i in range(rows):

  • for 반복문은 i를 0부터 7까지 8번 반복합니다. i는 현재 출력할 줄의 번호를 나타냅니다.

3. stars = "*" * (2 * i + 1)

  • 이 줄은 문자열 곱셈을 사용해 현재 줄에 필요한 별(*) 문자열을 만듭니다.
  • (2 * i + 1)은 각 줄에 출력할 별의 개수를 계산하는 식입니다.
    • i=0일 때: * (1개)
    • i=1일 때: *** (3개)
    • i=2일 때: ***** (5개)
  • 이렇게 각 줄마다 홀수 개의 별이 들어간 문자열이 stars 변수에 저장됩니다.

4. print(stars.center(2 * rows - 1))

  • print() 함수는 화면에 결과를 출력합니다.
  • .center() 메서드는 문자열을 특정 너비 안에서 가운데로 정렬해주는 역할을 합니다.
    • (2 * rows - 1)는 가장 아랫줄(i=7)의 별 개수인 15와 같습니다. 이는 삼각형이 출력될 전체 너비로 사용됩니다.
    • 예를 들어, 첫째 줄(stars = "*")은 15칸의 너비 안에서 가운데로 정렬되어 양쪽에 공백이 자동으로 추가됩니다.
    • 둘째 줄(stars = "***")도 15칸의 너비 안에서 가운데로 정렬됩니다.
  • 이 메서드 덕분에 별의 개수에 따라 자동으로 공백이 계산되어 중앙에 위치하게 되므로, 직접 공백을 계산하고 출력할 필요가 없습니다.

더보기

반복문을 한 번만 사용하여 코드를 더 간결하게 만들 수도 있다. 한 줄에 필요한 공백과 별을 계산하여 문자열을 만든 후 출력한다.

# 3: 단일 반복문 및 문자열 메서드 조합

rows = 8

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

코드 분석

1. rows = 8

  • rows 변수는 삼각형의 높이를 나타내며, 여기서는 8줄짜리 삼각형을 만듭니다.

2. for i in range(rows):

  • 반복문은 i를 0부터 7까지 8번 실행하여 총 8개의 줄을 만듭니다. i는 현재 줄의 번호(0부터 시작)를 나타냅니다.

3. stars = "*" * (2 * i + 1)

  • 이 줄은 문자열 곱셈을 사용해 현재 줄에 필요한 별(*) 문자열을 만듭니다.
  • (2 * i + 1)은 각 줄에 출력할 별의 개수를 계산하는 공식입니다. i가 0일 때 1개, 1일 때 3개, 2일 때 5개... 와 같이 별의 개수가 홀수로 증가합니다.

4. spaces = " " * (rows - i - 1)

  • 이 줄은 문자열 곱셈을 사용해 현재 줄에 필요한 공백( ) 문자열을 만듭니다.
  • (rows - i - 1)은 각 줄 앞에 올 공백의 개수를 계산하는 공식입니다. i가 0일 때 7개, 1일 때 6개... 와 같이 줄이 내려갈수록 공백의 개수가 하나씩 감소합니다.

5. print(spaces + stars)

  • 이 줄은 앞서 만들어진 spaces 문자열과 stars 문자열을 결합하여 한 줄을 완성하고 출력합니다. 예를 들어, 첫 번째 줄(i = 0)에서는 7개의 공백과 1개의 별을 합쳐서 *을 출력합니다.
  • 이 과정을 통해 줄마다 필요한 공백과 별을 계산하여 정삼각형 형태를 만듭니다.