백준 알고리즘 - 코틀린 풀이
https://www.acmicpc.net/problem/10816
문제
정답
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val n = readLine().toInt()
val inputN = readLine().split(" ").map {it.toInt()}
val m = readLine().toInt()
val inputM = readLine().split(" ").map {it.toInt()}
val hashMap = HashMap<Int,Int>()
repeat(n) {
hashMap[inputN[it]] = hashMap.getOrDefault(inputN[it],0) + 1
}
repeat(m) {
bw.write("${hashMap[inputM[it]] ?: 0} ")
}
bw.flush()
bw.close()
}
풀이
이번 문제는 두 배열의 숫자를 입력받아 새로 입력 받은 배열의 숫자가 기존 배열에 몇 개 포함되어 있는지를 구하는 문제입니다.
기본적인 mutableList나 array 형태의 입출력을 구현하면 시간 초과가 뜰 가능성이 높습니다.
따라서 저는 Key와 Value가 Integer 타입인 HashMap으로 생성하여 Key가 반복되는 횟수만큼 Value를 증가시키는 형태로 구현했습니다.
첫번째 입력인 n 만큼 반복하여 만약 배열의 숫자가 여러개라면 1씩 누적시키는 코드입니다.
getOrDefault로 처음 hashMap에 들어갈 때, 0으로 들어가도록 해줬습니다.
repeat(n) {
hashMap[inputN[it]] = hashMap.getOrDefault(inputN[it],0) + 1
}
출력을 위해 두번째 배열인 m만큼 반복시키고, hashMap에서 출력할 숫자를 key값으로 받아 write 해줬습니다.
한번도 hashMap에 들어간 적이 없다면 Null 을 반환하기 때문에 Null일 때 0을 출력하게 하였습니다.
repeat(m) {
bw.write("${hashMap[inputM[it]] ?: 0} ")
}
감사합니다.
'백준 알고리즘' 카테고리의 다른 글
[백준] 삼각형과 세변(5073번) - 코틀린 풀이 (0) | 2023.10.06 |
---|---|
[백준] 제로(10773번) - 코틀린 풀이 (0) | 2023.10.05 |
[백준] 회사에 있는 사람(7785번) - 코틀린 풀이 (0) | 2023.09.26 |
[백준 알고리즘] 수학은 비대면(19532번) - 코틀린 풀이 (0) | 2023.09.26 |
[백준 알고리즘] 행렬 덧셈(2738번) - 코틀린 풀이 (0) | 2023.09.25 |