도감에 순서대로 넣고 이름을 검색하면 번호가 나오고, 번호를 검색하면 이름이 나오는 구조이므로 array사용해서 하는 것 보다는 Map을 이용해서 빠르게 조회하는 것이 좋다고 판단하였습니다.
따라서, Pocketmon Name Map과 Pocketmon Id Map을 만들어서 풀었습니다.
전체 도감 삽입: O(n)
조회: O(1)
O(2n)
import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.BufferedWriter
import java.io.OutputStreamWriter
class IO1620 {
private val br = BufferedReader(InputStreamReader(System.`in`))
private val bw = BufferedWriter(OutputStreamWriter(System.out))
fun flush() = bw.flush()
fun write(message: String) = bw.write(message)
fun close() = bw.close()
fun getInt(): List<Int> = br.readLine().split(" ").map { it.toInt() }
fun getPockemon(): String = br.readLine()
fun getString(): String = br.readLine()
}
fun main() {
val nameMap = hashMapOf<String, String>()
val idMap = hashMapOf<String, String>()
val io = IO1620()
val (pockemonNum, dokamNum) = io.getInt()
(1..pockemonNum).forEach { idx ->
val sIdx = idx.toString()
val name = io.getPockemon()
nameMap[name] = sIdx
idMap[sIdx] = name
}
repeat(dokamNum) {
val query = io.getString()
if (nameMap.containsKey(query)) {
io.write(nameMap[query]!! + "\n")
} else if (idMap.containsKey(query)) {
io.write(idMap[query]!! + "\n")
}
}
io.flush()
io.close()
}