

더보기
이 방법은 코드가 가장 간결하고 직관적이다. for 루프 하나로 패턴의 위쪽과 아래쪽을 모두 처리할 수 있다. abs() 함수를 사용해 현재 줄이 중심에서 얼마나 떨어져 있는지 계산하고, 그에 따라 공백과 별의 개수를 정한다.
# 1: 하나의 루프와 문자열 곱하기 활용하기
n = 5
for i in range(-n + 1, n):
spaces = " " * abs(i)
stars = "*" * (2 * (n - abs(i)) - 1)
print(spaces + stars)
코드 분석
1. 변수와 루프 설정
- n = 5: 이 변수는 패턴의 최대 너비를 결정하는 기준점이에요. n이 5일 때 가장 넓은 줄의 별 개수는 2 * 5 - 1 = 9가 됩니다.
- for i in range(-n + 1, n): 이 루프는 i의 값을 -4부터 4까지(-4, -3, -2, -1, 0, 1, 2, 3, 4) 순차적으로 변경하며 총 9번 반복합니다. i의 값은 패턴의 각 줄을 나타내요. 음수 i는 다이아몬드 위쪽, 양수 i는 아래쪽을, 그리고 i=0은 중심 줄을 담당합니다.
2. 공백과 별 개수 계산
이 코드는 abs(i) 즉, i의 절댓값을 활용하여 공백과 별의 개수를 계산해요. abs(i)는 루프가 진행됨에 따라 4, 3, 2, 1, 0, 1, 2, 3, 4 순서로 변합니다.
- spaces = " " * abs(i): 공백의 개수를 계산합니다. abs(i)가 클수록(즉, 패턴의 가장자리) 공백이 많아지고, abs(i)가 0에 가까울수록(즉, 패턴의 중앙) 공백이 적어져요.
- 예를 들어, 첫 번째 줄(i=-4)에서는 abs(i)가 4이므로 공백이 4개 출력됩니다.
- 중심 줄(i=0)에서는 abs(i)가 0이므로 공백이 없습니다.
- stars = "*" * (2 * (n - abs(i)) - 1): 별의 개수를 계산합니다. 이 식은 abs(i)와 반대로 작동해 abs(i)가 작아질수록 별의 개수를 늘려줘요.
- 예를 들어, 첫 번째 줄(i=-4)에서는 2 * (5 - 4) - 1이므로 별이 1개 출력됩니다.
- 중심 줄(i=0)에서는 2 * (5 - 0) - 1이므로 별이 9개 출력됩니다.
더보기
이 코드는 두 개의 별도 루프를 사용해 다이아몬드 패턴을 만드는 방법이에요. 상단 삼각형과 하단 역삼각형을 따로 만들어 합치는 방식이라 직관적으로 이해하기 쉽다.
# 2: 두 개의 별도 루프 사용하기
1. 상단 삼각형 출력 (상단부, Including the middle row)
n = 5 # 중심의 최대 별 개수
for i in range(1, n + 1):
# 공백은 n - i 개
# 별은 2 * i - 1 개
spaces = " " * (n - i)
stars = "*" * (2 * i - 1)
print(spaces + stars)
2. 하단 역삼각형 출력 (하단부)
for i in range(n - 1, 0, -1):
# 공백은 n - i 개
# 별은 2 * i - 1 개
spaces = " " * (n - i)
stars = "*" * (2 * i - 1)
print(spaces + stars)
두 코드를 합치면 완벽한 다이아몬드 패턴이 완성됩니다.
n = 5
for i in range(1, n + 1):
spaces = " " * (n - i)
stars = "*" * (2 * i - 1)
print(spaces + stars)
for i in range(n - 1, 0, -1):
spaces = " " * (n - i)
stars = "*" * (2 * i - 1)
print(spaces + stars)
코드 분석
상단 삼각형 (피라미드) 부분
n = 5
for i in range(1, n + 1):
spaces = " " * (n - i)
stars = "*" * (2 * i - 1)
print(spaces + stars)
이 첫 번째 루프는 다이아몬드의 위쪽 절반(가장 넓은 줄 포함)을 만듭니다.
- for i in range(1, n + 1): i는 1부터 5까지(1, 2, 3, 4, 5) 반복됩니다. i는 현재 줄 번호를 나타내며, 이 값이 증가함에 따라 패턴이 넓어집니다.
- spaces = " " * (n - i): 공백의 개수를 계산해요. i가 1일 때 공백은 5-1=4개, i가 5일 때 공백은 5-5=0개로, 줄이 내려갈수록 공백이 줄어들어 별이 중앙에 정렬되는 효과를 줍니다.
- stars = "*" * (2 * i - 1): 별의 개수를 계산해요. i가 1일 때 별은 2*1-1=1개, i가 5일 때 별은 2*5-1=9개로, 줄이 내려갈수록 별의 개수가 홀수로 증가합니다.
- print(spaces + stars): 계산된 공백과 별을 합쳐서 한 줄을 출력합니다.
하단 역삼각형 부분
for i in range(n - 1, 0, -1):
spaces = " " * (n - i)
stars = "*" * (2 * i - 1)
print(spaces + stars)
이 두 번째 루프는 다이아몬드의 아래쪽 절반을 만듭니다.
- for i in range(n - 1, 0, -1): i는 4부터 1까지(4, 3, 2, 1) 거꾸로 반복됩니다. 이 루프는 위쪽 루프와 대칭되는 패턴을 만들기 위해 별의 개수를 줄여나갑니다.
- spaces = " " * (n - i): 다시 i의 값에 따라 공백의 개수를 계산해요. i가 4일 때 공백은 5-4=1개, i가 1일 때 공백은 5-1=4개로, 줄이 내려갈수록 공백이 증가합니다.
- stars = "*" * (2 * i - 1): 별의 개수를 계산합니다. i가 4일 때 별은 2*4-1=7개, i가 1일 때 별은 2*1-1=1개로, 별의 개수가 홀수로 줄어듭니다.
- print(spaces + stars): 이 과정이 반복되어 역삼각형 패턴이 완성됩니다.
이처럼 두 개의 루프가 각각 피라미드와 역피라미드를 만든 다음 합쳐져서 하나의 완벽한 다이아몬드 패턴이 되는 원리입니다.

'파이썬(문제풀이)' 카테고리의 다른 글
| 파이썬 모래시계 패턴 별찍기 (0) | 2025.09.09 |
|---|---|
| 파이썬 단어를 입력하면 거꾸로 출력 (0) | 2025.09.09 |
| 파이썬 정삼각형 별찍기 (0) | 2025.09.08 |
| 파이썬 - 별찍기 역직각삼각형 (0) | 2025.09.07 |
| 파이썬 별찍기 - 오른쪽으로 정렬된 직각삼각형 (0) | 2025.09.07 |