Algorithm/BOJ

[백준 알고리즘/C++] 11399 ATM

pinevienna 2021. 2. 20. 21:52

 

 

한 대의 ATM 앞에 n명의 사람이 기다리고 있다

총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우 (i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분)

 [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다

2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다

이렇게 3, 4, 5번 까지 돈을 뽑으면 총 39분이 걸리는데, 줄 서는 순서를 잘 바꾸면 대기시간이 시간이 줄어든다

각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 문제!

 

 

줄을 [2, 5, 1, 4, 3] 순서로 줄을 서면 가장 빠르게 모든 사람이 인출할 수 있는데

이 순서는 인출할 때 걸리는 시간이 짧은 순이다

그러므로 Pi를 기준으로 정렬하여 계산해주면 된다

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <algorithm>
using namespace std;
 
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    int n, arr[1000], sum[1000];
 
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
 
    sort(arr, arr + n);
 
    int res;
    res = sum[0= arr[0];
    for (int i = 1; i < n; i++) {
        sum[i] = sum[i - 1+ arr[i];
        res += sum[i];
    }
 
    cout << res;
}
cs