
10. 중첩 반복문 - 별 찍기로 연습하기
반복문 안에 반복문을 넣으면 어떤 일이 벌어질까? 이중 for문은 처음엔 헷갈리지만, 별 찍기 패턴으로 연습하면 금방 감이 온다. 구구단, 2차원 탐색까지 한번에 정복하자.
중첩 반복문이란?
반복문 안에 또 다른 반복문을 넣는 것이다. 바깥 반복문이 1번 실행될 때마다, 안쪽 반복문이 전체 반복된다.
for i in range(3): # 바깥: 0, 1, 2
for j in range(4): # 안쪽: 0, 1, 2, 3
print(f"({i},{j})", end=" ")
print() # 줄바꿈
출력:
(0,0) (0,1) (0,2) (0,3)
(1,0) (1,1) (1,2) (1,3)
(2,0) (2,1) (2,2) (2,3)

바깥 i가 0일 때 안쪽 j가 0
3까지 전부 실행된다. 그 다음 i가 1이 되면 다시 j가 0
3. 총 3 × 4 = 12번 실행된다.
💡 핵심: 바깥 반복 횟수 × 안쪽 반복 횟수 = 총 실행 횟수
별 찍기 - 기본 패턴
별 찍기는 중첩 반복문을 이해하는 최고의 연습이다. 바깥 for는 줄(행), 안쪽 for는 칸(열)을 담당한다.
패턴 1: 직각삼각형 (왼쪽 정렬)
for i in range(1, 6):
for j in range(i):
print("★", end="")
print()
★
★★
★★★
★★★★
★★★★★
i=1일 때 별 1개, i=2일 때 별 2개, ... i=5일 때 별 5개.
패턴 2: 직각삼각형 (역순)
for i in range(5, 0, -1):
for j in range(i):
print("★", end="")
print()
★★★★★
★★★★
★★★
★★
★
패턴 3: 직각삼각형 (오른쪽 정렬)
for i in range(1, 6):
print(" " * (5 - i), end="") # 공백 먼저
for j in range(i):
print("★", end="")
print()
★
★★
★★★
★★★★
★★★★★
핵심: 공백의 개수를 잘 계산하는 것이 포인트다. i=1일 때 공백 4개, i=2일 때 공백 3개, ... 공백은 5 - i개.
패턴 4: 피라미드
for i in range(1, 6):
print(" " * (5 - i), end="")
print("★" * (2 * i - 1))
★
★★★
★★★★★
★★★★★★★
★★★★★★★★★
💡 팁: 별 찍기 문제를 풀 때는 각 줄에 공백 몇 개, 별 몇 개가 필요한지 표로 정리해보면 쉽다.
| 줄 (i) | 공백 | 별 | 공식 |
|---|---|---|---|
| 1 | 4 | 1 | 공백: 5-i, 별: 2*i-1 |
| 2 | 3 | 3 | |
| 3 | 2 | 5 | |
| 4 | 1 | 7 | |
| 5 | 0 | 9 |
구구단 출력
중첩 반복문의 대표적인 활용이다.
for dan in range(2, 10):
print(f"--- {dan}단 ---")
for i in range(1, 10):
print(f"{dan} x {i} = {dan * i}")
print()
가로 형태 구구단
for i in range(1, 10):
for dan in range(2, 10):
print(f"{dan}x{i}={dan*i:2d}", end=" ")
print()
2x1= 2 3x1= 3 4x1= 4 5x1= 5 6x1= 6 7x1= 7 8x1= 8 9x1= 9
2x2= 4 3x2= 6 4x2= 8 5x2=10 6x2=12 7x2=14 8x2=16 9x2=18
...
2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
💡
{dan*i:2d}에서:2d는 2칸 너비로 정수를 맞추라는 뜻이다. 한 자리 수와 두 자리 수가 정렬된다.
2차원 탐색
2차원 데이터(표, 격자 등)를 처리할 때도 이중 반복문이 필요하다.
좌석 배치도
rows = ["A", "B", "C", "D"]
cols = 6
print(" ", end="")
for c in range(1, cols + 1):
print(f" {c} ", end="")
print()
print(" " + "---" * cols)
for row in rows:
print(f" {row} |", end="")
for col in range(1, cols + 1):
print(" O ", end="")
print()
1 2 3 4 5 6
------------------
A | O O O O O O
B | O O O O O O
C | O O O O O O
D | O O O O O O
리스트 안의 리스트 (2차원 리스트)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for num in row:
print(f"{num:3d}", end="")
print()
1 2 3
4 5 6
7 8 9
💡 2차원 리스트는 12편(리스트)에서 더 자세히 다룬다. 지금은 "이중 for문으로 행렬을 순회한다"는 것만 알아두자.
중첩 반복문 + break
중첩 반복문에서 break를 쓰면 가장 가까운(안쪽) 반복문만 중단된다.
for i in range(3):
for j in range(5):
if j == 3:
break # 안쪽 for만 중단
print(f"({i},{j})", end=" ")
print() # 바깥 for는 계속 실행
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
(2,0) (2,1) (2,2)
바깥 반복문까지 한 번에 끝내고 싶다면? 플래그 변수를 사용한다.
found = False
for i in range(5):
for j in range(5):
if i * j == 12:
print(f"찾았다! i={i}, j={j}")
found = True
break
if found:
break
실전 예시: 다이아몬드 패턴
n = 5
# 윗부분
for i in range(1, n + 1):
print(" " * (n - i) + "★" * (2 * i - 1))
# 아랫부분
for i in range(n - 1, 0, -1):
print(" " * (n - i) + "★" * (2 * i - 1))
★
★★★
★★★★★
★★★★★★★
★★★★★★★★★
★★★★★★★
★★★★★
★★★
★
직접 해보기
문제 1. 다음 패턴을 출력해보자.
12345
1234
123
12
1
문제 2. 구구단 중 결과가 짝수인 것만 출력해보자. (2~9단)
2 x 1 = 2
2 x 2 = 4
...
문제 3. 다음 숫자 피라미드를 출력해보자.
1
121
12321
1234321
123454321
문제 4. 5x5 격자에서 대각선(i==j)만 ★로 출력하고 나머지는 ·로 출력해보자.
★ · · · ·
· ★ · · ·
· · ★ · ·
· · · ★ ·
· · · · ★
정답 보기
# 문제 1
for i in range(5, 0, -1):
for j in range(1, i + 1):
print(j, end="")
print()
# 문제 2
for dan in range(2, 10):
for i in range(1, 10):
result = dan * i
if result % 2 == 0:
print(f"{dan} x {i} = {result}")
# 문제 3
n = 5
for i in range(1, n + 1):
print(" " * (n - i), end="")
# 올라가는 부분
for j in range(1, i + 1):
print(j, end="")
# 내려가는 부분
for j in range(i - 1, 0, -1):
print(j, end="")
print()
# 문제 4
for i in range(5):
for j in range(5):
if i == j:
print("★", end=" ")
else:
print("·", end=" ")
print()
오늘의 정리
| 항목 | 내용 |
|---|---|
| 중첩 반복문 | 반복문 안에 반복문. 바깥 1회 = 안쪽 전체 실행 |
| 총 실행 횟수 | 바깥 횟수 × 안쪽 횟수 |
| 별 찍기 핵심 | 바깥 for = 줄(행), 안쪽 for = 칸(열). 공백·별 개수를 표로 정리 |
| break 주의 | 가장 가까운 반복문만 중단. 바깥까지 끝내려면 플래그 변수 |
| 활용 | 구구단, 좌석 배치, 2차원 리스트 순회, 패턴 출력 |
다음 편 예고: 실습 - 숫자 맞추기 게임 만들기
조건문과 반복문을 모두 배웠으니, 이제 이것들을 합쳐서 진짜 동작하는 게임을 만들어보자! random 모듈도 함께 소개한다.
태그: 파이썬 Python 파이썬독학 중첩반복문 이중for문 별찍기 구구단 패턴출력 파이썬기초 IT교육
'Python' 카테고리의 다른 글
| 12. 리스트 - 데이터를 줄 세우기 (0) | 2026.02.22 |
|---|---|
| 11. 실습: 숫자 맞추기 게임 만들기 (0) | 2026.02.21 |
| 09. 반복문 (2) - while문과 반복 제어 (0) | 2026.02.21 |
| 08. 반복문 (1) - for문 (0) | 2026.02.21 |
| 07. 조건문 - if, elif, else (0) | 2026.02.21 |
댓글