문제 링크
문제 해설
프로젝트 "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)
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 1715 : 카드 정렬하기 (0) | 2023.03.03 |
---|---|
[Kotlin] 백준 9461 : 파도반 수열 (0) | 2023.03.01 |
[Kotiln] 백준 17175 : 피보나치는 지겨웡~ (0) | 2023.02.20 |
[Kotlin] 백준 27315 : 틀리는 건 싫으니까 쉬운 문제에 올인하려고 합니다 (0) | 2023.02.18 |
[Kotlin] 백준 21939 : 문제 추천 시스템 Version 1 (0) | 2023.02.14 |
댓글