[백준] 등수 매기기 (2012)(kotlin)

문제 설명

백준 2012번 문제 링크

입력 및 출력

» 입력

첫째 줄에 자연수 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)
}