ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준][Kotlin]11399번 ATM
    백준 2023. 2. 27. 23:25
    728x90

    문제의 해당 문구를 보면 알 수 있듯이 사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다. 4번 사람은 3+1+4+3 = 11분, 5번 사람은 3+1+4+3+2 = 13분이 걸리게 된다. 이 경우에 각 사람이 돈을 인출하는데 필요한 시간의 합은 3+4+8+11+13 = 39분이 된다.

     

    해당 문제는 간단히 말하자면 누적합의 합계를 구하는 문제였습니다.

    하기는 작성한 코드와 실행 결과 입니다.

     

    import java.io.BufferedReader
    import java.io.BufferedWriter
    import java.io.InputStreamReader
    import java.io.OutputStreamWriter
    import java.lang.Math.max
    import java.util.*
    
    data class info(val idx: Int, val value: Int)
    
    fun main() {
    //    val s = System.currentTimeMillis()
        var br = BufferedReader(InputStreamReader(System.`in`))
    //    var bw = BufferedWriter(OutputStreamWriter(System.out))
        var st = StringTokenizer(br.readLine())
        val N = st.nextToken().toInt() // 자료의 개수
        //var sb = StringBuilder()
    
        var arr = IntArray(N){0}
        st = StringTokenizer(br.readLine())
        repeat(N){
            arr[it] = st.nextToken().toInt()
        }
    
        Arrays.sort(arr)
        var arr2 = IntArray(N){0}
        arr2[0] = arr[0]
        for(i in 1 .. arr.size-1){
            arr2[i] = arr2[i-1]+arr[i]
        }
        print(arr2.sum())
    
    //    bw.flush()
    //    bw.close()
    
    //   val e = System.currentTimeMillis()
    //   println((e-s)/1000.0)
    
    }

Designed by Tistory.