본문 바로가기
백준/C++

백준 11399번 : ATM [C++]

by 대니스 2022. 8. 26.

주소 : https://www.acmicpc.net/problem/11399

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

소스 코드 :

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
	int N;
	int sum = 0;
	vector<int> v;
	cin >> N;
	for (int i = 0;i < N;i++)
	{
		int element;
		cin >> element;
		v.push_back(element);
	}

	sort(v.begin(), v.end());

	for (int i = 0;i < N;i++)
	{
		sum += v[i] * (N - i);
	}

	cout << sum;
}

마무리 : 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하기 위해서는 걸리는 시간이 작은 사람부터 인출하는 것이 최솟값을 구하는 방법이다. 그래서 sort를 한 뒤에 제일 먼저 돈을 인출하는 시간은 각 사람들이 인출할 때 시간이 들기 때문에 사람의 수를 곱하고 그 다음 인출하는 시간은 사람의 수-1 씩으로 시간을 계산하면 된다.