본문 바로가기
  • 개발하는 곰돌이
Algorithm/BOJ

[Kotlin] 백준 16678 : 모독

by 개발하는 곰돌이 2023. 2. 22.

문제 링크

 

16678번: 모독

명예에 죽고 명예에 사는 나라 얼라이언스에는 1명의 왕과  N명의 국회의원이 있다. 각 N 명의 국회의원은 a1, a2, ..., aN 의 명예 점수를 갖고 있으며, 명예 점수가 양수인 한 그들은 국회의원을

www.acmicpc.net



문제 해설

프로젝트 "Defile"은 모든 명예 점수를 1씩 감소시키고 이 때, 0이 되는 명예 점수만 있다면 계속 반복하는 방식이다. 즉, 단 한번의 "Defile"으로 모든 국회의원의 명예 점수를 0 이하로 만들기 위해선 가장 낮은 명예 점수가 1이어야하고, 각 명예 점수의 차이가 1 이하여야 한다는 것이다.

 

해커의 수를 최소로 하기 위해선 명예 점수를 1부터 공차가 1인 등차수열을 이루되, 중복은 신경쓰지 않아도 된다. 이를 위해서 명예 점수를 오름차순으로 정렬한 후 배열을 순회하면서 \(a_i\)가 목표로 하는 명예 점수보다 크거나 같다면 \(a_i\)에서 명예 점수를 뺀 수치(=\(a_i\)를 목표로 하는 명예 점수로 만들기 위해 필요한 해커의 수)를 총 필요한 해커의 수에 더해나가면 된다.


 

Code

fun main() = with(System.`in`.bufferedReader()) {
    val honor = IntArray(readLine().toInt()) { readLine().toInt() }.sortedArray()
    var target = 1
    var hackers = 0L
    honor.map { if (it >= target) { hackers += it - target++ } }
    println(hackers)
}

댓글