Passer au contenu principal

🔁 반복문

📖 반복문이란?

**반복문(Loop)**은 같은 코드를 여러 번 실행합니다. 목록을 순회하거나 특정 횟수만큼 작업을 반복할 때 사용합니다.

💡 for 문

범위로 반복

fun main() {
// 1부터 5까지
for (i in 1..5) {
println(i)
}
// 출력: 1 2 3 4 5
}

until (끝 제외)

fun main() {
// 1부터 4까지 (5는 제외)
for (i in 1 until 5) {
println(i)
}
// 출력: 1 2 3 4
}

step (간격)

fun main() {
// 2씩 증가
for (i in 1..10 step 2) {
println(i)
}
// 출력: 1 3 5 7 9

// 10씩 증가
for (i in 0..100 step 10) {
print("$i ")
}
// 출력: 0 10 20 30 40 50 60 70 80 90 100
}

역순

fun main() {
// 5부터 1까지 감소
for (i in 5 downTo 1) {
println(i)
}
// 출력: 5 4 3 2 1

// 10부터 0까지 2씩 감소
for (i in 10 downTo 0 step 2) {
print("$i ")
}
// 출력: 10 8 6 4 2 0
}

📋 리스트로 반복

기본 순회

fun main() {
val fruits = listOf("사과", "바나나", "포도")

for (fruit in fruits) {
println(fruit)
}
// 출력:
// 사과
// 바나나
// 포도
}

인덱스와 함께

fun main() {
val fruits = listOf("사과", "바나나", "포도")

for ((index, fruit) in fruits.withIndex()) {
println("${index + 1}. $fruit")
}
// 출력:
// 1. 사과
// 2. 바나나
// 3. 포도
}

🔄 while 문

while

fun main() {
var count = 1

while (count <= 5) {
println(count)
count++
}
// 출력: 1 2 3 4 5
}

do-while

조건을 나중에 검사 (최소 1번 실행)

fun main() {
var count = 1

do {
println(count)
count++
} while (count <= 5)
// 출력: 1 2 3 4 5
}

🎯 break와 continue

break (중단)

fun main() {
for (i in 1..10) {
if (i == 6) {
break // 반복 중단
}
println(i)
}
// 출력: 1 2 3 4 5
}

continue (건너뛰기)

fun main() {
for (i in 1..10) {
if (i % 2 == 0) {
continue // 짝수는 건너뛰기
}
println(i)
}
// 출력: 1 3 5 7 9
}

🎯 실전 예제

구구단

fun main() {
val dan = 3

println("=== ${dan}단 ===")
for (i in 1..9) {
println("$dan × $i = ${dan * i}")
}
}

별 찍기

fun main() {
// 삼각형
for (i in 1..5) {
println("*".repeat(i))
}
// 출력:
// *
// **
// ***
// ****
// *****

println()

// 역삼각형
for (i in 5 downTo 1) {
println("*".repeat(i))
}
}

합계 계산

fun main() {
var sum = 0

for (i in 1..100) {
sum += i
}

println("1부터 100까지의 합: $sum")
// 출력: 1부터 100까지의 합: 5050
}

소수 판별

fun main() {
val number = 17
var isPrime = true

if (number < 2) {
isPrime = false
} else {
for (i in 2 until number) {
if (number % i == 0) {
isPrime = false
break
}
}
}

if (isPrime) {
println("$number는 소수입니다")
} else {
println("$number는 소수가 아닙니다")
}
}

최댓값 찾기

fun main() {
val numbers = listOf(15, 42, 8, 23, 56, 4)
var max = numbers[0]

for (num in numbers) {
if (num > max) {
max = num
}
}

println("최댓값: $max") // 최댓값: 56
}

숫자 맞추기 게임

fun main() {
val answer = 42
var attempts = 0

while (true) {
attempts++

println("숫자를 입력하세요:")
val guess = readln().toInt()

when {
guess < answer -> println("UP!")
guess > answer -> println("DOWN!")
else -> {
println("정답! ($attempts번 시도)")
break
}
}
}
}

🆚 for vs while

언제 뭘 쓸까?

// ✅ 반복 횟수를 아는 경우 → for
fun main() {
for (i in 1..10) {
println(i)
}
}

// ✅ 조건에 따라 반복 → while
fun main() {
var input = ""

while (input != "quit") {
println("명령을 입력하세요:")
input = readln()
}
}

🤔 자주 묻는 질문

Q1. .. vs until의 차이는?

A: 끝을 포함하는지 여부입니다!

fun main() {
// 1..5 → 1, 2, 3, 4, 5 (끝 포함)
for (i in 1..5) {
print("$i ")
}
println()

// 1 until 5 → 1, 2, 3, 4 (끝 제외)
for (i in 1 until 5) {
print("$i ")
}
}

Q2. 무한 루프는?

A: while (true) 사용!

fun main() {
var count = 0

while (true) {
count++
println(count)

if (count >= 5) {
break // 탈출 조건 필수!
}
}
}

Q3. repeat는 뭔가요?

A: 간단한 반복에 사용!

fun main() {
// 5번 반복
repeat(5) {
println("Hello")
}

// 인덱스도 사용 가능
repeat(5) { index ->
println("${index + 1}번째")
}
}

🎬 마치며

반복문으로 효율적인 코드를 작성하세요!

핵심 정리:
✅ for - 범위, 리스트 순회
✅ while - 조건 기반 반복
✅ break - 반복 중단
✅ continue - 현재 회차 건너뛰기
✅ repeat - 간단한 반복

다음 단계: 함수 기초에서 함수를 만들어보세요!