algorithm/Sorting, Binary Search

[C++] BOJ 11399 ATM

gartenhh 2021. 5. 8. 01:41

문제

www.acmicpc.net/problem/11399

 

11399번: ATM

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

www.acmicpc.net

코드

#include<iostream>
#include<algorithm>
using namespace std;

int n, arr[1001], sum = 0;

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) cin >> arr[i];
	sort(arr, arr + n);

	for (int i = n; i > 0; i--)
		sum += i * arr[n - i];
	cout << sum;
}

풀이방법

시간계산과정을 살펴보면, 맨앞에 선 사람이 걸리는 시간은 n번, 2번째로 선 사람이 걸리는 시간은 (n-1)번, ... 이런 식으로 최종시간을 계산한다는 사실을 발견할 수 있다. 따라서 인출하는 데에 걸리는 시간이 적은 사람부터 ATM기를 쓰게 한다.

고민과정

정렬을 직접 구현하려다가 그냥 sort함수를 썼다..