[백준] 등수 매기기 (2012)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다.
» 출력
첫째 줄에 불만도의 합을 최소로 할 때, 그 불만도를 출력한다.
예제 입출력(테스트케이스)
입력 | 출력 |
---|---|
5 1 5 3 1 2 |
3 |
문제 풀이1
import kotlin.math.abs
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
val list = mutableListOf<Long>()
repeat(n) {
list.add(readLine().toLong())
}
list.sort()
println(
list.foldIndexed(0L) { index, total, grade ->
total + abs(grade - (index + 1))
}
)
}
문제 풀이2
import kotlin.math.abs
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
val list = IntArray(n)
repeat(n) {
list[it] = readLine().toInt()
}
list.sort()
println(
list.foldIndexed(0L) { index, total, grade ->
total + abs(grade - (index + 1))
}
)
}
문제 풀이3
import kotlin.math.abs
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
val list = IntArray(n)
repeat(n) {
list[it] = readLine().toInt()
}
list.sort()
var sum = 0L
for (i in list.indices)
sum += abs(list[i] - (i + 1))
println(sum)
}