https://www.acmicpc.net/problem/11399
🔎 해결 방법
오랜만에 한번에 맞은 문제 ㅋㅋ
문제를 읽어보면 바로 어떻게 풀어야 하는지 감을 잡을 수 있다.
줄을 [2, 5, 1, 4, 3] 순서로 세우는 것은
결국 돈을 인출하는데 걸리는 시간을 [1, 2, 3, 3, 4] 와 같이 오름차순으로 정렬하겠다는 소리이다.
그래서 중첩 for문을 사용해서 그냥 다 더해주면 끝~
💡 내 코드(C++)
// [11399] ATM
// https://www.acmicpc.net/problem/11399
// 그리디 알고리즘
// 가장 큰 숫자는 최대한 적게 더해저야 함 -> 오름차순 정렬
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int main(void)
{
int n; // 사람의 수
int time = 0, sum = 0;
scanf("%d", &n);
vector<int> p(n); // 각 사람이 돈을 인출하는데 걸리는 시간
for (int i = 0; i < n; i++) {
scanf("%d", &p[i]);
}
sort(p.begin(), p.end()); // 오름차순 정렬
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
time += p[j];
}
sum += time;
time = 0;
}
printf("%d\n", sum);
}
반응형
'Baekjoon > 그리디 알고리즘' 카테고리의 다른 글
[5585] 거스름돈(C++) (0) | 2020.04.06 |
---|---|
[1541] 잃어버린 괄호 (0) | 2020.01.17 |
[11047] 동전 0 (0) | 2020.01.15 |
[1931] 회의실배정 (0) | 2020.01.15 |
[11501] 주식 (0) | 2019.09.20 |