✅ 이 문서는 Kotlin의 입력/출력, 조건문, 반복문을 빨리 활용할 수 있도록 정리한 문법입니다. Java, Python 유경험자라면 바로 매칭됩니다.
📥 입력
🔹 기본 입력
val line = readLine()!!
val (a, b) = readLine()!!.split(" ").map { it.toInt() }
- readLine() : 한 줄 입력
- !! : null 아님 단언 (코테에선 대부분 사용)
- split() : 문자열 분할 → List
- map { it.toInt() } : 문자열 리스트를 정수형으로 변환
🔹 빠른 입력 (BufferedReader)
import java.io.*
val br = BufferedReader(InputStreamReader(System.`in`))
val line = br.readLine()!!
val nums = line.split(" ").map { it.toInt() }
- 여러 줄 입력 시 필수 (백준 등에서 시간 초과 방지)
📤 출력
🔹 기본 출력
println("Hello") // 줄 바꿈 O
print("Hi") // 줄 바꿈 X
🔹 빠른 출력 (BufferedWriter)
val bw = BufferedWriter(OutputStreamWriter(System.out))
bw.write("출력 내용\n")
bw.flush()
bw.close()
✅ 실전 예시: 입력 받아 합 출력
val (a, b) = readLine()!!.split(" ").map { it.toInt() }
println(a + b)
🔍 조건문
🔹 if 문
val x = 5
if (x > 0) {
println("positive")
} else if (x == 0) {
println("zero")
} else {
println("negative")
}
🔹 if 표현식 (삼항 연산자 대체)
val max = if (a > b) a else b
🔹 when 문 (Java의 switch 대체)
val grade = 'A'
when (grade) {
'A' -> println("Excellent")
'B' -> println("Good")
else -> println("Try harder")
}
- when은 값 뿐 아니라 조건도 가능
when {
x > 0 -> println("positive")
x == 0 -> println("zero")
else -> println("negative")
}
🔁 반복문
🔹 for 문 (범위 기반)
for (i in 0 until 5) { // 0~4
println(i)
}
for (i in 1..5) { // 1~5
println(i)
}
for (i in 5 downTo 1) { // 5~1
println(i)
}
for (i in 0 until 10 step 2) { // 0, 2, 4, 6, 8
println(i)
}
🔹 for-each 문 (List, String 등 순회)
val list = listOf(1, 2, 3)
for (num in list) println(num)
val str = "Kotlin"
for (ch in str) println(ch)
🔹 repeat(n)
repeat(3) {
println("Hello") // 3번 반복
}
🔹 while, do-while
var x = 3
while (x > 0) {
println(x)
x--
}
do {
println(x)
x++
} while (x < 3)
🔹 실전 입력 패턴 추가 예시
🔸 N줄 숫자 입력
val n = readLine()!!.toInt()
val numbers = List(n) { readLine()!!.toInt() }
🔸 2차원 배열 입력
val (n, m) = readLine()!!.split(" ").map { it.toInt() }
val grid = Array(n) { readLine()!!.split(" ").map { it.toInt() }.toIntArray() }
🔹 when 표현식 (값 반환)
val grade = 'B'
val result = when (grade) {
'A' -> "Excellent"
'B' -> "Good"
else -> "Try harder"
}
println(result)
- when은 단순 조건 분기뿐 아니라 표현식으로 값 반환 가능
🔹 반복 제어: break, continue, return@label, 라벨 사용
🔸 기본 제어문
for (i in 0..4) {
if (i == 2) continue // 2 건너뛰기
if (i == 4) break // 반복 종료
println(i)
}
🔸 return@repeat 예시
repeat(5) {
if (it == 2) return@repeat // repeat 블록의 현재 반복만 건너뜀 (== continue)
println("$it 실행")
}
- return@label은 Java의 라벨 break와 유사한 Kotlin의 표현식 제어 방식
- return@repeat는 현재 반복을 건너뛰고 다음 반복으로 넘어감 → 즉 continue 역할
- return은 함수 자체 종료, return@X는 해당 블록만 탈출
🔸 return@run 예시
val result = run {
for (i in 1..5) {
if (i == 3) return@run "조기 종료: $i"
}
"정상 종료"
}
println(result) // "조기 종료: 3"
- return@run은 람다 표현식 블록(run, let 등) 조기 종료 시 사용
🔸 라벨을 붙인 반복문 탈출 (중첩 루프에서 break 정확히 적용)
outer@for (i in 1..3) {
for (j in 1..3) {
if (i * j == 4) break@outer // 바깥 루프까지 탈출
println("$i $j")
}
}
- break@label, continue@label은 중첩 루프에서 정확한 위치 제어에 사용
- return@label은 Java의 라벨 break와 유사한 Kotlin의 표현식 제어 방식
- return@repeat는 현재 반복을 건너뛰고 다음 반복으로 넘어감 → 즉 continue 역할
- return은 함수 자체 종료, return@X는 해당 블록만 탈출
| 상황 | Kotlin 문법 | 작동 방식 | Java 유사 동작 | 비고 |
|---|---|---|---|---|
repeat |
return@repeat |
다음 반복으로 진행 | continue |
반복 람다 |
forEach, map, 등 |
return@forEach |
현재 항목만 건너뜀 | continue |
반복 람다 |
run, apply 등 |
return@run |
람다 전체 종료 | return or break |
람다 종료 |
✅ 요약 정리
- 입력: readLine()!!, split(" ").map { it.toInt() }
- 출력: println(), 고속은 BufferedWriter
- 조건문: if, if 표현식, when으로 switch 대체
- 반복문: for, while, repeat, for (x in collection)
- 코테에서는 repeat, until, downTo, step 많이 사용
다음은 시리즈 ④: 배열(Array) 정리로 이어집니다.
'Code Odyssey' 카테고리의 다른 글
| Kotlin 코딩테스트 문법 시리즈 ⑤ : 리스트(List) 정리 (0) | 2025.07.05 |
|---|---|
| Kotlin 코딩테스트 문법 시리즈 ④ : 배열(Array) 정리 (1) | 2025.07.04 |
| Kotlin 코딩테스트 문법 시리즈 ② : 문자열 (String) (1) | 2025.07.02 |
| Kotlin 코딩테스트 문법 시리즈 ① : 기본 자료형 & 변수 (0) | 2025.07.01 |
| Map<String, Integer> dp 는 시간초과가 나는 이유 : 프로그래머스 - 사칙연산 (1) | 2025.06.11 |