[백준] 11399번: ATM

2018. 6. 2. 03:42알고리즘

 

11399번: ATM

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

www.acmicpc.net

 

ATM 문제도 전형적인 그리디 문제 중 하나입니다.

 

앞에서부터 누적된 합을 답에 더해줘야 하기 때문에, 누적되는 합이 최소가 되도록 정렬해야 합니다.

그러기 위해선 더 적은 시간이 소요되는 사람을 우선시하여 정렬을 진행하고 누적으로 소요되는 시간들을 더해주면 됩니다.

 

그 값들을 모두 더하면 최소 시간이 걸립니다.

 

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

int N;
int ans;
vector<int> waitingTime;

void input() {
  cin >> N;
  waitingTime.resize(N);

  for (int i = 0; i < N; i++) {
    cin >> waitingTime[i];
  }
}

void calculate() {
  sort(waitingTime.begin(), waitingTime.end());

  ans = 0;
  int sum = 0;

  for (int i = 0; i < N; i++) {
    sum += waitingTime[i];
    ans = ans + sum;
  }
}

void printAnswer() {
  cout << ans << '\n';
}

int main() {
  ios::sync_with_stdio(false);

  input();
  calculate();
  printAnswer();

  return 0;
}

'알고리즘' 카테고리의 다른 글

[백준] 1744번: 수 묶기  (0) 2018.06.03
[백준] 1541번: 잃어버린 괄호  (0) 2018.06.02
[백준] 1931번: 회의실 배정  (0) 2018.06.02
[백준] 11047번: 동전 0  (0) 2018.05.31
[백준] 1967번: 트리의 지름  (0) 2018.05.31