코딩테스트 공부를 다시 시작하려고 한다.
어떤 언어로 공부해야 되나 고민이 됐는데 아무래도 Kotlin으로 손이 가서 쉬운 문제부터 차근차근 시작하고자 했다.
문제
문제는 꽤나 쉬운 편에 속한다.
이번에는 코틀린의 간단한 문법들을 알아봐서 나중에 시간을 줄여보고자 한다.
문제 풀이
1) 입출력 흐름
- 표준 입력(System.in)으로부터 데이터를 읽어오기 위해 BufferedReader를 생성한다.
- 표준 출력(System.out)으로 결과를 내보내기 위해 bufferedWriter를 생성한다.
- 그리고 여러 개의 문자열을 빨리 출력하기 위해 StringBuilder를 사용한다. (append를 이용하면 효율적이기 때문)
- StringBuilder에 모아둔 내용을 한 번에 bufferedWriter로 써서 출력한다.
- 입출력에 사용한 bufferedReader, bufferedWriter를 close하여 자원을 해제한다.
val bufferedReader = BufferedReader(InputStreamReader(System.`in`))
val bufferedWriter = System.out.bufferedWriter()
...
val stringBuilder = StringBuilder()
...
bufferedWriter.write(stringBuilder.toString())
bufferedReader.close()
bufferedWriter.close()
2) 코딩 흐름
- 처음 입력받은 문자열을 정수로 반환하여 n 변수에 저장한다.
val n = bufferedReader.readLine().toInt()
- 크기가 2,000,000인 BooleanArray를 생성하여 값을 저장한다. (절댓값이 1,000,000보다 작거나 같다고 했으므로 1,000,000만큼 더해준 것이다.)
val list = BooleanArray(2_000_001)
repeat(n) {
list[bufferedReader.readLine().toInt() + 1_000_000] = true
}
- 그리고 list.indices를 통해 배열 전체를 순회하며 true인 인덱스들만(==입력한 값) 결과를 출력할 stringBuilder에 추가해 준다.
- 배열을 순회할 때 인덱스 차례대로 순회하므로 오름차순으로 정렬이 되는 것이다.
for(i in list.indices) {
if(list[i]) {
stringBuilder.append("${i-1_000_000}\n")
}
}
전체 코드
import java.io.BufferedReader
import java.io.InputStreamReader
fun main() {
val bufferedReader = BufferedReader(InputStreamReader(System.`in`))
val bufferedWriter = System.out.bufferedWriter()
val n = bufferedReader.readLine().toInt()
val list = BooleanArray(2_000_001)
repeat(n) {
list[bufferedReader.readLine().toInt() + 1_000_000] = true
}
val stringBuilder = StringBuilder()
for(i in list.indices) {
if(list[i]) {
stringBuilder.append("${i-1_000_000}\n")
}
}
bufferedWriter.write(stringBuilder.toString())
bufferedReader.close()
bufferedWriter.close()
}
'CS > Coding Test' 카테고리의 다른 글
[백준/1764/Kotlin] 듣보잡 (0) | 2025.03.16 |
---|---|
[백준/11399/Kotlin] ATM (0) | 2025.03.06 |
[BOJ/1929/C++] 소수 구하기 (0) | 2024.02.04 |
[BOJ/9205/C++] 맥주 마시면서 걸어가기 (1) | 2024.02.01 |
[BOJ/1181/C++] 단어 정렬 (1) | 2024.01.26 |