반복문 (for, while) - 루프의 기초
선수학습(1개)
요약
반복문의 기본 개념을 알아봅니다. for문과 while문의 구조, break와 continue 등 정보처리기사 실기에 출제되는 루프 개념을 정리합니다.
반복문 핵심 정리
| 종류 | 사용 시점 | 예시 |
|---|---|---|
| for | 반복 설정을 괄호 안에 정리할 때 | for(i=0; i<5; i++) |
| while | 조건만 걸고, 나머지는 다른 곳에서 관리할 때 | while(n > 0) |
| break | 루프 즉시 종료 | if(found) break; |
| continue | 다음 반복으로 건너뛰기 | if(skip) continue; |
| 종류 | 사용 시점 | 예시 |
|---|---|---|
| for | 반복 설정을 괄호 안에 정리할 때 | for(i=0; i<5; i++) |
| while | 조건만 걸고, 나머지는 다른 곳에서 관리할 때 | while(n > 0) |
| break | 루프 즉시 종료 | if(found) break; |
| continue | 다음 반복으로 건너뛰기 | if(skip) continue; |
| 종류 | 사용 시점 | 예시 |
|---|---|---|
| for | 리스트나 범위를 순회 | for i in range(5): |
| while | 조건만 걸고, 나머지는 다른 곳에서 관리할 때 | while n > 0: |
| range | 정수 범위를 생성 | range(0, 5) |
| break | 루프 즉시 종료 | if found: break |
| continue | 다음 반복으로 건너뛰기 | if skip: continue |
for문 쌩기초
for문은 반복에 필요한 설정을 괄호 안에 정리해서 쓰는 반복문입니다.
- 초기식: 반복을 시작하기 전에 변수를 준비하는 부분 (예: i를 0으로 설정)
- 조건식: 반복을 계속할지 판단하는 부분 (예: i가 3보다 작은가?)
- 증감식: 한 번 반복할 때마다 변수를 변경하는 부분 (예: i를 1 증가)
Python의 for문은 C/Java와 구조가 다릅니다. 리스트나 범위(range)를 순회하는 방식입니다.
가장 많이 쓰는 패턴은 range() 함수와 함께 사용하는 것입니다.
for문 실행 순서
| 단계 | i 값 | 조건 (i < 3) | 출력 |
|---|---|---|---|
| 1회 | 0 | 참 | 0 |
| 2회 | 1 | 참 | 1 |
| 3회 | 2 | 참 | 2 |
| 4회 | 3 | 거짓 | (종료) |
| 단계 | i 값 | 조건 (i < 3) | 출력 |
|---|---|---|---|
| 1회 | 0 | 참 | 0 |
| 2회 | 1 | 참 | 1 |
| 3회 | 2 | 참 | 2 |
| 4회 | 3 | 거짓 | (종료) |
| 단계 | i 값 | range(3)에 남은 값 | 출력 |
|---|---|---|---|
| 1회 | 0 | 1, 2 | 0 |
| 2회 | 1 | 2 | 1 |
| 3회 | 2 | 없음 | 2 |
| - | - | 순회 끝 | (종료) |

for문 구성요소 생략
C언어의 for문은 초기식, 조건식, 증감식을 각각 생략할 수 있습니다. 세미콜론(;)은 반드시 유지해야 합니다.
초기식 생략 — 변수가 이미 선언/초기화된 경우
i가 for문 바깥에서 이미 값을 가지고 있으므로 초기식이 필요 없습니다. 기출문제에서 자주 나오는 패턴입니다.
증감식 생략 — 루프 본문에서 직접 변수를 변경하는 경우
모두 생략 (무한 루프)
for문 구성요소 생략
Java의 for문은 초기식, 조건식, 증감식을 각각 생략할 수 있습니다. 세미콜론(;)은 반드시 유지해야 합니다.
초기식 생략 — 변수가 이미 선언/초기화된 경우
i가 for문 바깥에서 이미 값을 가지고 있으므로 초기식이 필요 없습니다. 기출문제에서 자주 나오는 패턴입니다.
증감식 생략 — 루프 본문에서 직접 변수를 변경하는 경우
모두 생략 (무한 루프)
while문 쌩기초
while문은 조건만 while에 붙이고, 초기식·증감식은 다른 곳에 작성하는 반복문입니다.
while문 예시

중괄호 없는 while문
반복할 코드가 한 줄이면 중괄호를 생략할 수 있습니다.
기출문제에서 자주 나오는 패턴입니다. 예를 들어 변수 값을 조건에 도달할 때까지 증가시킬 때 다음과 같이 사용합니다.
a++만 반복하므로 중괄호 없이 한 줄로 작성한 것입니다.
for문 vs while문
while문은 조건만 while에 붙이고, 초기식·증감식은 다른 곳에 작성하는 반복문입니다.
while문 예시
for문 vs while문
while문은 조건만 while에 붙이고, 초기식·증감식은 다른 곳에 작성하는 반복문입니다.
while문 예시
for문 vs while문
| 구분 | for문 | while문 |
|---|---|---|
| 초기식 위치 | 괄호 안 | 루프 밖 |
| 증감식 위치 | 괄호 안 | 루프 안 |
| 핵심 차이 | 설정을 괄호 안에 정리 | 조건만 붙이고 나머지는 다른 곳에 |
| 구분 | for문 | while문 |
|---|---|---|
| 초기식 위치 | 괄호 안 | 루프 밖 |
| 증감식 위치 | 괄호 안 | 루프 안 |
| 핵심 차이 | 설정을 괄호 안에 정리 | 조건만 붙이고 나머지는 다른 곳에 |
| 구분 | for문 | while문 |
|---|---|---|
| 반복 기준 | 리스트, range 등을 순회 | 조건이 참인 동안 반복 |
| 증감식 | 자동 (다음 값으로 이동) | 직접 작성해야 함 |
| 핵심 차이 | 순회 대상을 for에 정리 | 조건만 붙이고 나머지는 다른 곳에 |
break - 루프 종료 쌩기초
break는 루프를 즉시 종료합니다.
배열에서 값 찾기
리스트에서 값 찾기
continue - 다음 반복으로 쌩기초
continue는 현재 반복을 건너뛰고 다음 반복으로 넘어갑니다.

| i | 동작 | 출력 |
|---|---|---|
| 0 | 출력 | 0 |
| 1 | 출력 | 1 |
| 2 | continue | (건너뜀) |
| 3 | 출력 | 3 |
| 4 | 출력 | 4 |
break vs continue
| 키워드 | 동작 | 결과 |
|---|---|---|
| break | 루프 완전 종료 | 루프 밖으로 탈출 |
| continue | 현재 반복만 건너뜀 | 다음 반복 계속 |

do-while문 기초
do-while문은 먼저 실행한 뒤 조건을 검사합니다. 조건이 거짓이어도 최소 1회는 실행됩니다.
| 구분 | while문 | do-while문 |
|---|---|---|
| 조건 검사 시점 | 먼저 검사 후 실행 | 먼저 실행 후 검사 |
| 최소 실행 횟수 | 0회 (조건이 거짓이면 실행 안 함) | 1회 (무조건 한 번은 실행) |
do-while문은 먼저 실행한 뒤 조건을 검사합니다. 조건이 거짓이어도 최소 1회는 실행됩니다.
| 구분 | while문 | do-while문 |
|---|---|---|
| 조건 검사 시점 | 먼저 검사 후 실행 | 먼저 실행 후 검사 |
| 최소 실행 횟수 | 0회 (조건이 거짓이면 실행 안 함) | 1회 (무조건 한 번은 실행) |
++i vs i++ 기초
증감 연산자는 변수를 1 증가(++) 또는 1 감소(--)시키는 연산자입니다. ++i와 i++ 둘 다 i를 1 증가시키지만, 증가 시점과 값을 사용하는 순서가 다릅니다.
| 표현 | 이름 | 동작 |
|---|---|---|
++i | 전위 증가 | 먼저 증가, 그 다음 값 사용 |
i++ | 후위 증가 | 먼저 값 사용, 그 다음 증가 |
단독 사용 시 (차이 없음)
for문의 증감식에서는 결과가 같습니다.
값을 사용할 때 (차이 있음)
a = ++i처럼 증감 결과를 다른 변수에 대입하거나 수식 안에서 사용할 때는 전위/후위의 결과가 달라집니다. 자세한 내용은 증감 연산자 - 값을 사용할 때를 참고하세요.
중첩 반복문 기초
반복문 안에 반복문을 넣을 수 있습니다.
출력:
단계별 실행 과정
바깥 루프(i)가 1회 실행될 때마다 안쪽 루프(j)가 처음부터 끝까지 실행됩니다.
i = 0일 때:
| j 값 | 조건 (j < 3) | 출력 |
|---|---|---|
| 0 | 참 | (0,0) |
| 1 | 참 | (0,1) |
| 2 | 참 | (0,2) |
| 3 | 거짓 | 안쪽 루프 종료 → \n 출력 |
i = 1일 때:
| j 값 | 조건 (j < 3) | 출력 |
|---|---|---|
| 0 | 참 | (1,0) |
| 1 | 참 | (1,1) |
| 2 | 참 | (1,2) |
| 3 | 거짓 | 안쪽 루프 종료 → \n 출력 |
i = 2일 때: 조건 i < 2가 거짓 → 바깥 루프 종료

변수 스코프
C언어에서 블록(block) 이란 중괄호 {}로 감싼 코드 영역을 말합니다. 블록 안에서 선언한 변수는 그 블록이 끝나면 사라집니다. 이 변수가 유효한 범위를 변수 스코프(scope)라고 합니다.
for (int j = 0; ...) 처럼 for문 안에서 선언한 변수는 해당 for문 블록 안에서만 사용할 수 있습니다.
System.out.print vs System.out.println
Java에서 출력할 때 사용하는 두 메서드의 차이를 반드시 알아야 합니다.
| 메서드 | 줄바꿈 | 예시 출력 |
|---|---|---|
System.out.print() | 안 함 | AB (같은 줄) |
System.out.println() | 함 | A (줄바꿈) B |
for문으로 배열 순회하기
for문은 배열과 함께 사용하는 경우가 매우 많습니다.
a.length는 배열 a에 들어있는 원소의 개수를 알려줍니다. 위 예시에서는 3입니다. 배열에 대한 자세한 내용은 배열 페이지를 참고하세요.
range 함수
range() 함수는 정수 범위를 생성합니다. for문과 함께 가장 많이 사용됩니다.
| 표현 | 생성되는 값 | C/Java 대응 |
|---|---|---|
range(5) | 0, 1, 2, 3, 4 | for(i=0; i<5; i++) |
range(2, 6) | 2, 3, 4, 5 | for(i=2; i<6; i++) |
range(0, 10, 3) | 0, 3, 6, 9 | for(i=0; i<10; i+=3) |
print() 함수와 end 매개변수
Python의 print() 함수는 기본적으로 출력 후 줄바꿈을 합니다. end 매개변수로 줄바꿈 대신 다른 문자를 지정할 수 있습니다.
| 사용법 | 줄바꿈 | 예시 출력 |
|---|---|---|
print("A") | 함 | A (줄바꿈) B |
print("A", end="") | 안 함 | AB (같은 줄) |
print("A", end=" ") | 안 함 (공백) | A B (공백 구분) |
sep 매개변수와 기본 구분자
print(a, b, c)처럼 여러 값을 한 번에 넘기면 파이썬은 기본적으로 공백 한 칸으로 구분해 출력합니다. 이 구분자는 sep 매개변수로 바꿀 수 있습니다.
| 사용법 | 결과 |
|---|---|
print("A", "B", "C") | A B C (기본 공백 구분) |
print("A", "B", "C", sep="") | ABC (구분 없음) |
print("A", "B", "C", sep=",") | A,B,C (콤마 구분) |
print("A", "B", "C", sep="-") | A-B-C (하이픈 구분) |
sep과 end는 함께 쓸 수도 있습니다. sep은 인자들 사이에 들어가고, end는 모두 출력한 뒤에 붙습니다.
for문으로 리스트 순회하기
for문은 리스트와 함께 사용하는 경우가 매우 많습니다.
값을 직접 순회
인덱스로 순회
인덱스를 사용하면 리스트의 위치 번호로 각 요소에 접근할 수 있습니다.
len(a)는 리스트 a에 들어있는 원소의 개수를 알려줍니다. 위 예시에서는 3입니다.
인덱스와 값을 동시에 순회
enumerate()는 인덱스와 값을 동시에 알려주는 함수입니다. 자세한 내용은 enumerate 함수 페이지를 참고하세요.
중첩 반복문 기초
반복문 안에 반복문을 넣을 수 있습니다. 시험에서 자주 출제되는 패턴입니다.
출력:
단계별 실행 과정
바깥 루프(i)가 1회 실행될 때마다 안쪽 루프(j)가 처음부터 끝까지 실행됩니다.
i = 0일 때:
| j 값 | range(3) 남은 값 | 출력 |
|---|---|---|
| 0 | 1, 2 | (0,0) |
| 1 | 2 | (0,1) |
| 2 | 없음 | (0,2) |
| - | 순회 끝 | 안쪽 루프 종료 → 줄바꿈 |
i = 1일 때:
| j 값 | range(3) 남은 값 | 출력 |
|---|---|---|
| 0 | 1, 2 | (1,0) |
| 1 | 2 | (1,1) |
| 2 | 없음 | (1,2) |
| - | 순회 끝 | 안쪽 루프 종료 → 줄바꿈 |
i = 2: range(2)의 순회가 끝남 → 바깥 루프 종료
2차원 리스트와 중첩 반복문
2차원 리스트를 순회할 때 중첩 반복문을 사용합니다. 이 패턴은 정보처리기사 실기에 출제된 바 있습니다.
바깥 for문은 lol의 각 하위 리스트를 순회하고, 안쪽 for문은 하위 리스트의 각 요소를 순회합니다. end=""로 같은 줄에 출력하고, 내부 반복이 끝나면 print()로 줄바꿈합니다.