RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
← 브론즈 IV

반복문

for·while로 같은 일을 반복한다 — 범위와 종료 조건.

기초 & 구현 Bronze IV 브론즈 IV
선수 지식: 조건문
1강 반복문의 개념: 같은 일을 되풀이 공식

반복문이란?

"1부터 100까지 더하라" 같은 일을 손으로 100줄 적을 수는 없습니다. 반복문
같은 동작을 조건이 만족하는 동안 자동으로 되풀이하게 해 줍니다.


1. for 문 — 횟수가 정해졌을 때

for (int i = 0; i < 5; i++) {
    cout << i << '\n';   // 0 1 2 3 4
}

for는 세 부분으로 이뤄집니다.

  1. 초기화 int i = 0 — 시작값
  2. 조건 i < 5 — 참인 동안 반복
  3. 증감 i++ — 한 바퀴 끝날 때마다 실행
for i in range(5):     # 0, 1, 2, 3, 4
    print(i)

파이썬은 range(시작, 끝, 간격)을 씁니다. 끝값은 포함하지 않습니다.


2. while 문 — 조건만 있을 때

횟수가 아니라 "어떤 조건일 동안" 반복할 땐 while이 자연스럽습니다.

int n; cin >> n;
while (n > 1) {
    n /= 2;          // n이 1이 될 때까지 반으로
    cout << n << '\n';
}
while n > 1:
    n //= 2
    print(n)

3. 반복 변수 활용 — 합 구하기

long long sum = 0;
for (int i = 1; i <= n; i++)
    sum += i;          // 1 + 2 + ... + n
cout << sum << '\n';

반복문 밖에 누적용 변수를 두고, 안에서 갱신하는 게 가장 흔한 패턴입니다.


4. break와 continue

  • break — 반복을 즉시 끝낸다.
  • continue — 이번 바퀴만 건너뛰고 다음 바퀴로.
for (int i = 1; i <= 100; i++) {
    if (i % 7 == 0) continue;   // 7의 배수는 건너뛴다
    if (i > 50) break;          // 50 넘으면 멈춘다
    cout << i << ' ';
}

복잡도

N번 도는 반복문은 \(O(N)\)입니다. 반복문 안의 일이 무거우면 그만큼 곱해집니다.
Bronze에선 보통 \(O(N)\) 한두 번이면 충분합니다.


정리

  • 횟수가 정해지면 for, 조건만 있으면 while.
  • 파이썬 range의 끝값은 미포함.
  • 누적은 "밖에 변수, 안에서 갱신".
  • break는 즉시 종료, continue는 한 바퀴 건너뛰기.
2강 반복문 구현과 무한루프 피하기 공식

반복문 구현 레퍼런스

반복문에서 가장 무서운 건 무한 루프off-by-one(하나 차이) 오류입니다.
구체적인 패턴과 함정을 코드로 정리합니다.


1. 기본 골격

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n; cin >> n;
    for (int i = 1; i <= n; i++) {
        cout << i * i << '\n';   // 1부터 n까지 제곱
    }
}
n = int(input())
for i in range(1, n + 1):       # 1 ~ n (n 포함하려면 n+1)
    print(i * i)

1 ~ n을 다 돌려면 파이썬은 range(1, n + 1)이라는 점을 꼭 기억하세요.


2. 입력 개수만큼 반복

int n; cin >> n;
long long sum = 0;
for (int i = 0; i < n; i++) {
    int x; cin >> x;
    sum += x;
}
cout << sum << '\n';
n = int(input())
total = 0
for _ in range(n):              # 변수를 안 쓰면 _ 로
    total += int(input())
print(total)

3. 무한 루프와 탈출

조건이 영원히 참이면 프로그램이 멈추지 않습니다(시간 초과).

while (true) {
    int x; cin >> x;
    if (x == 0) break;   // 0이 들어오면 종료 — 탈출 조건 필수!
    cout << x * 2 << '\n';
}
while True:
    x = int(input())
    if x == 0:
        break
    print(x * 2)

while (true)를 쓸 땐 반드시 안에 break 조건이 있어야 합니다. 또 while
조건에 쓰는 변수를 반복 안에서 바꿔 주는 것을 잊으면 무한 루프가 됩니다.


4. 함정과 패턴 인식

  • off-by-one<<= 혼동으로 한 번 더/덜 돔. 작은 N으로 손으로 세어 확인.
  • 증감 누락while에서 카운터를 안 늘려 무한 루프.
  • 누적 변수 초기화 — 반복 밖에서 sum = 0을 빠뜨림.

문제에 "N개의 수", "1부터 N까지", "0이 입력될 때까지", "각 줄마다" 같은 말이
보이면 반복문이 중심입니다.


정리

반복문은 (1) 시작·끝·간격을 정확히, (2) 무한 루프 방지(탈출 조건/카운터 갱신),
(3) 누적 변수 초기화 — 이 셋을 챙기면 안정적입니다. 의심되면 N=3으로 직접
한 바퀴씩 손으로 따라가 보세요.