[백준] 11399번: ATM
2018. 6. 2. 03:42ㆍ알고리즘
11399번: ATM
첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)
www.acmicpc.net
ATM 문제도 전형적인 그리디 문제 중 하나입니다.
앞에서부터 누적된 합을 답에 더해줘야 하기 때문에, 누적되는 합이 최소가 되도록 정렬해야 합니다.
그러기 위해선 더 적은 시간이 소요되는 사람을 우선시하여 정렬을 진행하고 누적으로 소요되는 시간들을 더해주면 됩니다.
그 값들을 모두 더하면 최소 시간이 걸립니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N;
int ans;
vector<int> waitingTime;
void input() {
cin >> N;
waitingTime.resize(N);
for (int i = 0; i < N; i++) {
cin >> waitingTime[i];
}
}
void calculate() {
sort(waitingTime.begin(), waitingTime.end());
ans = 0;
int sum = 0;
for (int i = 0; i < N; i++) {
sum += waitingTime[i];
ans = ans + sum;
}
}
void printAnswer() {
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
input();
calculate();
printAnswer();
return 0;
}
'알고리즘' 카테고리의 다른 글
[백준] 1744번: 수 묶기 (0) | 2018.06.03 |
---|---|
[백준] 1541번: 잃어버린 괄호 (0) | 2018.06.02 |
[백준] 1931번: 회의실 배정 (0) | 2018.06.02 |
[백준] 11047번: 동전 0 (0) | 2018.05.31 |
[백준] 1967번: 트리의 지름 (0) | 2018.05.31 |