백준 11399 : ATM
문제 링크:
문제 내용:
인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다.
줄을 서 있는 사람의 수 N과 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어졌을 때, 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 프로그램을 작성하시오.
Idea:
최소 대기시간을 구하기 위해서는 돈을 인출하는데 필요한 시간이 제일 적은 사람부터 줄을 서야한다.
즉, 인출시간이 제일 적은 사람부터 선택하는 그리디 알고리즘(greedy algorithm)이다.
tmp : 각 사람의 대기시간
time : 총 대기 시간
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <stdio.h>
#include <algorithm>
using namespace std;
int main() {
int N;
scanf("%d", &N);
int* arr = new int[N];
for (int i = 0; i < N; i++)
scanf("%d", &arr[i]);
//정렬
sort(arr, arr + N);
//대기시간 구하기
int time = 0, tmp = 0;
for (int i = 0; i < N; i++) {
tmp += arr[i];
time += tmp;
}
printf("%d\n", time);
return 0;
}
|
cs |
'백준 Baekjoon' 카테고리의 다른 글
[C++] 백준 1966 : 프린터 큐 (0) | 2021.01.07 |
---|---|
[C++] 백준 2293 : 동전 1 (0) | 2020.12.22 |
[C++] 백준 5568 : 카드 놓기 (0) | 2020.12.07 |
[C++] 백준 1931 : 회의실배정 (0) | 2020.12.03 |
[C언어] 백준 2839 : 설탕 배달 (0) | 2020.11.25 |