작성일: 2023년 10월 17일
작성자: 알고리즘 전문가
목차
1. 문제 설명
당신은 ATM의 사용자입니다. ATM에서는 여러 사용자가 대기하고 있으며, 각 사용자는 자신의 계좌에서 돈을 인출하기 위해 줄을 서 있습니다.
각 사용자가 돈을 인출하는 데 걸리는 시간은 다를 수 있습니다. 이 문제는 모든 사용자가 인출을 완료하는 데 걸리는 총 시간을 계산하는 것입니다.
당신에게 주어진 입력은 각 사용자의 인출 시간 리스트입니다. 모든 사용자는 순서대로 ATM을 사용하며, 앞에 있는 사용자가 다 사용한 후에 그 다음 사용자가 사용할 수 있습니다.
총 인출 시간이란, 각 사용자가 인출하기 위해 ATM 앞에서 대기하는 시간과 인출 소요 시간을 합한 것입니다. 이를 계산하는 프로그램을 코틀린으로 작성하게 됩니다.
2. 입력 형식
첫 번째 줄에 사용자 수 N (1 <= N <= 1,000) 이 주어집니다.
두 번째 줄에 각 사용자의 인출 소요 시간이 공백으로 구분되어 주어집니다. 인출 소요 시간은 1초 이상 1,000초 이하입니다.
3. 출력 형식
모든 사용자의 총 인출 시간을 한 줄에 출력합니다.
4. 예제
예제 입력
5 3 1 4 3 2
예제 출력
32
설명
각 사용자의 인출 시간이 주어졌을 때, 순서대로 지나가며 대기 시간과 인출 소요 시간을 계산합니다.
1번 사용자: 3초
2번 사용자: 3초 + 1초 = 4초
3번 사용자: 4초 + 4초 = 8초
4번 사용자: 8초 + 3초 = 11초
5번 사용자: 11초 + 2초 = 13초
총 시간 = 3 + 4 + 8 + 11 + 13 = 32초
5. 접근 방법
이 문제를 해결하기 위해서는 입력받은 인출 시간을 순차적으로 누적하여 총 시간을 계산하는 방식으로 접근할 수 있습니다.
구체적인 문제 해결 방법은 다음과 같습니다:
- 사용자 수 N과 각 사용자의 인출 소요 시간을 리스트로 입력받습니다.
- 이 리스트를 정렬합니다. (문제의 요구사항에 따라 다르게 처리할 수 있습니다)
- 각 사용자의 인출 소요 시간을 누적합으로 계산하여 총 인출 시간을 구합니다.
- 마지막으로 총 시간을 출력합니다.
6. 코드 구현
아래는 문제 해결을 위한 코틀린 코드입니다.
fun main() { val n = readLine()!!.toInt() val times = readLine()!!.split(" ").map { it.toInt() }.sorted() var totalTime = 0 var accumulateTime = 0 for (time in times) { accumulateTime += time totalTime += accumulateTime } println(totalTime) }
코드 설명
– 먼저, 사용자의 수 N을 입력받고, 다음 줄에서 인출 시간을 리스트로 입력받습니다.
– 입력받은 시간을 정렬한 후, 각 사용자의 인출 시간을 누적하여 총 시간을 계산합니다.
– 최종적으로 결과를 출력합니다.
7. 결론
이번 강좌에서는 ATM 인출 시간을 계산하는 문제를 다루어 보았습니다. 알고리즘 문제 풀이에서 중요한 것은 문제를 정확히 이해하고, 접근 방법을 명확히 하는 것입니다.
또한, 코틀린과 같은 언어를 통해 실제로 코드를 구현해보는 과정을 통해 이론적인 부분뿐만 아니라 실전 감각도 익히는 것이 중요합니다.
이러한 연습을 통해 코딩 테스트에서 높은 점수를 얻을 수 있을 것입니다.
앞으로도 다양한 문제를 풀어보며 알고리즘적 사고를 기르기를 바랍니다.