반복문
1 / 10

반복문

for, while, range, 그리고 누적합과 2중 반복문

수업 교재: Lesson 9. 반복문
주요 내용: for, while, range(), break, continue, 2중 반복문

오늘의 수업 목표

  • for문과 range()로 정해진 횟수만큼 반복하기
  • while문의 조건식 설계와 무한 루프 방지하기
  • break와 continue로 흐름 제어하기
  • 누적합, 카운팅, 최대·최솟값 탐색 패턴 익히기
  • 2중 반복문으로 구구단과 모든 순서쌍 탐색하기

range() 함수의 수열 생성법

파이썬의 대표적인 수열 생성기

range(5)          # 0, 1, 2, 3, 4 (끝값 5 미포함)
range(2, 6)       # 2, 3, 4, 5
range(1, 10, 2)   # 1, 3, 5, 7, 9 (2씩 증가)
range(5, 0, -1)   # 5, 4, 3, 2, 1 (역순 카운트다운)

⚠️ 주의: 끝값은 항상 포함되지 않습니다!

while 문과 무한 루프 방지

조건이 참인 동안 계속 실행되는 루프

battery = 100
while battery > 0:
    print(f"배터리: {battery}%")
    battery -= 30  # 탈출을 위해 변수를 반드시 변경!

루프 안에서 조건 변수가 갱신되지 않으면 무한 루프(TLE)에 빠집니다.

break vs continue — 흐름 강제 변경

명령어 동작 방식
break 루프를 즉시 완전히 빠져나옴 (강제 종료)
continue 남은 코드를 건너뛰고 바로 다음 턴으로 이동

반복문의 3대 핵심 패턴

# 1. 누적합: total을 루프 밖에서 0으로 초기화
total = 0
for i in range(1, n + 1): total += i

# 2. 카운팅: count를 루프 밖에서 0으로 초기화
count = 0
for x in data:
    if x % 2 == 0: count += 1

# 3. 최댓값 탐색: 첫 데이터를 기준점으로 잡기
max_val = first_num
for x in data[1:]:
    if x > max_val: max_val = x

2중 반복문 — 겉과 속의 톱니바퀴

바깥 루프 1회당 안쪽 루프가 전체를 순회합니다.

# 구구단: 바깥 8회 x 안쪽 9회 = 총 72회 수행
for dan in range(2, 10):
    for step in range(1, 10):
        print(f"{dan} x {step} = {dan * step:2d}", end=" ")
    print()

💡 총 실행 횟수 = (바깥쪽 횟수 × 안쪽 횟수)

2중 반복문으로 모든 순서쌍(조합) 탐색

모든 경우의 수를 빠짐없이 확인하는 브루트포스 기본형

# 두 주사위의 합이 7이 되는 모든 순서쌍
for i in range(1, 7):      # 첫 번째 주사위
    for j in range(1, 7):  # 두 번째 주사위
        if i + j == 7:
            print(f"({i}, {j})")

⚠️ 주의: 바깥 루프와 안쪽 루프의 변수명은 반드시 서로 다르게 써야 합니다!

흔히 빚어지는 3대 루프 버그

  • range() 끝값 누락: range(1, 10)은 9까지만 돕니다.
  • 누적 변수 루프 안에서 초기화: 매 턴 0으로 리셋되어 합산이 증발합니다.
  • while문 갱신 누락: 탈출 조건을 만족하지 못해 무한 루프가 발생합니다.

반복문 핵심 요약

항목 수칙
for vs while 정해진 횟수 순회는 for, 조건 기반은 while
변수 초기화 누적합/카운팅 변수는 반드시 루프 바깥에 선언
2중 루프 변수 바깥쪽과 안쪽 루프 변수명을 서로 다르게 지정
ESC — 수업으로 돌아가기  ·  F — 전체화면