반응형

백준 11399번 문제입니다. (solved.ac)기준 실버 3 문제입니다.

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

 

11399번: ATM

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

www.acmicpc.net

문제

문제 접근

문제는 복잡해 보이는데 단순 정렬 문제입니다. 입력받은 수들을 정렬한 후 현재 숫자 + 앞에 있는 수들의 합을 모두 더해주면 됩니다.

ex ) 3 1 4 3 2 를 1 2 3 3 4로 정렬 후  1 + (1+2) + (1+2+3) + (1+2+3+3) + (1+2+3+3+4) = 32

내장 정렬함수를 사용하여도 풀 수 있고 저는 선택 정렬을 구현하여 문제를 해결하였습니다.

선택 정렬은 처음부터 끝까지 모든 수를 탐색하고 가장 작은 값을 찾은 후 맨 왼쪽으로 보내는 것을 반복하면 되는 간단한 정렬 알고리즘입니다.

 

정답 코드

첫 번째 코드는 선택 정렬을 구현하여 문제를 해결하였고 아래에 있는 주석처리된 부분이 내장 함수를 사용하여 문제를 해결한 부분입니다.

// 선택 정렬 사용
fun main() {
    var ans = 0

    readln().toInt()
    val timeList = readln().split(" ").map { it.toInt() }.toIntArray()

    // implement bubble sort
    for (i in 0 until timeList.size){
        var min = timeList[i]
        var minIndex = i
        for (j in i until timeList.size){
            if (timeList[j] < min){
                min = timeList[j]
                minIndex = j
            }
        }
        val temp = timeList[i]
        timeList[i] = min
        timeList[minIndex] = temp
    }

    for (index in 0 until timeList.size) {
        for (time in 0..index) {
            ans += timeList[time]
        }
    }

    println(ans)

}

// sorted() 사용
//fun main() {
//    var ans = 0
//
//    readln().toInt()
//    val timeList = readln().split(" ").map { it.toInt() }.sorted().toIntArray()
//
//    for (index in 0 until timeList.size) {
//        for (time in 0..index) {
//            ans += timeList[time]
//        }
//    }
//
//    println(ans)
//
//}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기