본문 바로가기

알고리즘(w.KOTLIN)/그리디(Greedy)

[백준][코틀린][11399] ATM

728x90

https://www.acmicpc.net/problem/11399

 

11399번: ATM

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

www.acmicpc.net

문제 풀이

1. 시간 정보를 P 배열에 저장한다.

2. 배열 P를 오름 차순 정렬 한다.

3. 결과가 P[0] + (P[0] + P[1]) + (P[0] + P[1] + P[2]) ... 로 되므로 이중 for 문을 이용하여 결과를 구한다.

4. i 는 0부터 N까지 탐색하고 j는 0부터 i까지 탐색한다.

코드

import java.io.*

fun main(args: Array<String>) {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val N = br.readLine().toInt()
    val P = mutableListOf<Int>()
    br.readLine().split(" ").map { it.toInt() }.forEach {
        P.add(it)
    }

    // 시간을 기준으로 오름차순 정렬
    P.sort()

    var result = 0

    for (i in 0 until N) {
        var sum = 0
        for (j in 0..i) {
            sum += P[j]
        }

        result += sum
    }

    println(result)
}
728x90