문제
풀이
현재 사람이 인출하는데 필요한 시간은 앞으로 인출할 사람들이 기다려야하는 시간이다. 그러므로 총 시간은 시간이 적게 걸리는 사람이 먼저 인출할 때 최소가 된다. 입력받은 배열을 오름차순으로 정렬하는 것이 이 문제에서 사용되는 그리디 알고리즘이다. for문을 통해 현재 사용되는 시간 $\times$ 남은 사람의 수를 합한 값을 출력한다.
코드
import java.util.*
fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
val num = br.readLine().toInt()
val st = StringTokenizer(br.readLine())
val arr = IntArray(num){ st.nextToken().toInt() }
arr.sort()
var sum = 0
for(i in 0 until num) {
sum += arr[i] * (num - i)
}
bw.write("$sum")
bw.flush()
bw.close()
br.close()
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[백준] 2438 ~ 2446번: 별 찍기 - 1 ~ 9 - Kotlin[코틀린] (0) | 2023.08.05 |
---|---|
[백준] 1012번: 유기농 배추 - Kotlin[코틀린] (0) | 2023.08.04 |
[백준] 2606번: 바이러스 - Kotlin[코틀린] (0) | 2023.07.31 |
[백준] 2583번: 영역 구하기 - Kotlin[코틀린] (0) | 2023.07.27 |
[백준] 2667번: 단지번호붙이기 - Kotlin[코틀린] (0) | 2023.07.26 |