{ }codelper

배우기 › C

흐름 제어 · 06

반복문

같은 일을 여러 번: for와 while.

반복문은 같은 코드를 여러 번 돌려요.
아래 예제는 1부터 n까지 수를 하나씩 찍으면서 더하고, 마지막에 합계를 찍어요.

#include <stdio.h> int main(void) {    int n, total = 0;    scanf("%d", &n);    for (int i = 1; i <= n; i++) {        printf("%d\n", i);        total += i;    }    printf("%d\n", total);    return 0;}
stdin
5
stdout
1
2
3
4
5
15

핵심

  • 가장 흔한 꼴은 "1부터 n까지"예요.
    시작 값, 계속할 조건, 한 바퀴마다 바뀌는 양을 정해요.
  • 반복하면서 값을 모으는 누적(total += i)은 합계·개수·최댓값 문제의 기본이에요.
  • 목록이나 문자열을 하나씩 돌 때는 번호 없이 값을 바로 꺼내는 짧은 꼴이 있어요.
  • while은 조건만 보고, 조건이 참인 동안 계속 돌아요.
  • break는 반복을 빠져나가고 continue는 이번 바퀴만 건너뛰어요.
    둘 다 가장 안쪽 반복 하나에만 적용돼서, 이중 반복을 한 번에 나가려면 표시 변수를 두거나 함수에서 return해요.

언어별로 쓰는 법

Pythonfor i in range(1, n + 1): — range의 끝 값은 포함하지 않아요.
간격은 range(10, 0, -2), 하나씩은 for x in nums:, 조건은 while 조건:.
do-while은 없어요
JavaScriptfor (let i = 1; i <= n; i++), 간격은 i -= 2.
하나씩은 for (const x of nums).
while (조건) { }, do { } while (조건);.
바깥 반복까지 나가려면 이름표 break outer;
TypeScriptJavaScript와 같아요
Javafor (int i = 1; i <= n; i++), 하나씩은 for (int x : nums).
while, do { } while.
이름표 break outer;도 돼요
C#for (int i = 1; i <= n; i++), 하나씩은 foreach (var x in nums).
while, do { } while
C++for (int i = 1; i <= n; i++), 하나씩은 for (int x : nums).
while, do { } while
Cfor (int i = 1; i <= n; i++) — 값을 하나씩 꺼내는 꼴이 없어서 번호로 돌아요.
while, do { } while
Craykon반복 (i = 1; i <= n; i++), 하나씩은 각각 (x 에서 nums), 조건은 동안 (조건) { }.
빠져나가기 그만, 건너뛰기 건너뛰기.
do-while은 없어요.
동안은 장면(애니메이션)에서는 한 바퀴마다 한 화면씩 쉬지만, 콘솔 풀이에서는 쉬지 않고 돌아요

자주 하는 실수

while에서 조건을 바꾸지 않았어요

i = 1
while i <= 5:
    print(i)

→ 끝나지 않아요. 1만 끝없이 찍어요

조건을 바꾸는 줄(i += 1, i++)을 몸체에 꼭 넣어요.

반복이 끝난 뒤에 i를 썼어요Java · C# · C · C++ · JavaScript · TypeScript · Craykon

for (int i = 0; i < 3; i++) { }
printf("%d\n", i);

→ 오류 — for에서 만든 i는 반복 안에서만 있어요

반복 뒤에도 필요하면 반복 앞에서 만들어요.
Python의 i는 반복 뒤에도 마지막 값으로 남아요.

for … in으로 값을 돌았어요JavaScript · TypeScript

const nums = [10, 20];
for (const x in nums) console.log(x);

→ 0, 1 — 값이 아니라 번호예요(그것도 문자열 "0", "1")

값은 for (const x of nums)로 돌아요.

언어마다 다른 점
Python range(a, b)는 b를 포함하지 않아서, 1부터 n까지는 range(1, n + 1)이에요.
C 계열과 크레이콘도 i <= n인지 i < n인지 한 번 더 확인해요.
하나 차이로 답이 틀리는 일이 반복문에서 가장 흔해요.

연습 문제