문제
11399번: ATM
첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)
www.acmicpc.net

풀이
현재 사람이 인출하는데 필요한 시간은 앞으로 인출할 사람들이 기다려야하는 시간이다. 그러므로 총 시간은 시간이 적게 걸리는 사람이 먼저 인출할 때 최소가 된다. 입력받은 배열을 오름차순으로 정렬하는 것이 이 문제에서 사용되는 그리디 알고리즘이다. for문을 통해 현재 사용되는 시간 남은 사람의 수를 합한 값을 출력한다.
코드
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 |