1. 문제 링크
2. 문제 설명
줄을 서 있는 사람의 수와 각 사람이 돈을 인출하는데 걸리는 시간을 입력받은 후,
각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 출력하는 문제입니다.
3. 소스코드
BOJ 11399번 ATM C++ 풀이입니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
int N, P;
vector<int> v;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> P;
v.push_back(P);
}
sort(v.begin(), v.end());
int result = 0;
for (int i = 0; i < N; i++)
// for (int j = 0; j <= i; j++)
// result += v[j];
result += v[i] * (N - i);
cout << result;
return 0;
}
20번 라인 : 최솟값을 구하려면 돈을 인출하는데 필요한 시간이 적게 걸리는 사람부터 인출해야 하므로 오름차순으로 정렬합니다.
22 ~ 24번 라인 : 3명의 사람이 있다고 가정하고 돈을 인출하는데 필요한 시간을 오름차순으로 정렬했다고 가정하면,
v[0], v[0] + v[1], v[0] + v[1] + v[2]이므로 이중 for문을 이용하여 구할 수 있습니다.
25번 라인 : 위의 예제를 살펴보면 v[0]은 3번, v[1]은 2번, v[2]는 1번 더하는 것을 알 수 있습니다.
따라서 23, 24번 라인의 for문을 사용하지 않고, 25번 라인의 식을 이용하여 단일 for문으로도 풀 수 있습니다.
'Algorithm' 카테고리의 다른 글
[백준 9663번 C++] N-Queen (0) | 2020.10.13 |
---|---|
[백준 14888번 C++] 연산자 끼워넣기 (0) | 2020.10.07 |
[백준 2309번 C++] 일곱 난쟁이 (0) | 2020.10.05 |
[백준 10814번 C++] 나이순 정렬 (0) | 2020.09.21 |
[백준 2751번 C++] 수 정렬하기 2 (0) | 2020.09.21 |