각 좌표마다 동일한 층이 존재할 수 있으므로 map을 이용해서 <높이, 좌표개수>를 저장한다
답 변수로 <최소 시간, 높이>를 지정한 뒤
가능한 높이(0..256)까지 돌면서 필요한 최소시간을 계산
import java.io.BufferedReader
import java.io.InputStreamReader
val br = BufferedReader(InputStreamReader(System.`in`))
fun main() {
val (r,c,inventory) = br.readLine().trim().split(" ").map{ it.toInt() }
val map: HashMap<Int, Int> = hashMapOf()
var ans = Pair(Int.MAX_VALUE, -1)
// Get graph && total # of given block get
allocMapElement(map, r)
(0..256).forEach { h ->
var build = 0
var remove = 0
map.keys.forEach { key ->
val value = map[key]!!
if (h - key > 0) {
build += (h - key) * value
} else if (h - key < 0) {
remove += (key - h) * value
}
}
if (remove + inventory >= build) {
val time = (2 * remove) + build
if (time <= ans.first) {
ans = Pair(time, h)
}
}
}
println("${ans.first} ${ans.second}")
}
fun allocMapElement(map: HashMap<Int, Int>, r: Int) {
repeat(r) {
br.readLine().trim().split(" ").forEach {
it.toInt().also { it ->
if (map.containsKey(it)) {
map[it] = map[it]!! + 1
} else {
map[it] = 1
}
}
}
}
}