본문 바로가기
공부/알고리즘

[0614] 알고리즘

by Piva 2021. 6. 15.

11399. ATM

  문제 봐보다 어딘가 익숙해서 보니... 알고리즘 강의 들었을 때 기말고사 문제로 나왔던 문제였다. 그나마 이해할 수라도 있는 문제였었는데... 마침 자다 일어난 머리로도 풀 수 있을 것 같아서 풀었다.

 

#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
  std::cin.tie(NULL);
  std::ios_base::sync_with_stdio(false);

  int n;
  int num;
  long long min = 0;
  std::vector<int> time;

  std::cin >> n;

  for (int i = 0; i < n; i++)
  {    
    std::cin >> num;
    time.push_back(num);
  }
  std::vector<long long> sum (n, 0);
  std::sort (time.begin(), time.end());

  sum[0] = time[0];
  min = sum[0];

  for (int i = 1; i < n; i++)
  {
    sum[i] = sum[i - 1] + time[i];
    min += sum[i];
  }  

  std::cout << min << '\n';

  return 0;
}

  그리디 알고리즘 문제. 입력받은 수들을 벡터로 저장하고 이 벡터를 algorithm의 sort를 이용해 정렬, 각 사람의 대기 시간을 구한다. 원래 2중 for문이 들어가 있었는데... 어차피 i-1번째 사람의 대기 시간에 i번째 사람의 인출 시간을 더하면 i번째 사람의 총 대기시간이 구해져서 코드를 더 간단히 만들 수 있었다.

 

  그리고 언제나 상기하고자 해도 놓치는 자료형 범위... 처음엔 모든 자료형을 int로 했다가 그래서는 문제에서 나올 수 있는 최대 수들에 대해 크기가 모자랄 수 있음을 알아내고 long long으로 바꿨다. 입력 범위와 조건을 잘 살펴보고 범위를 따지는 버릇을 들여야겠다.

 

  그리고 알고리즘 헤더파일... 편하다 최고

'공부 > 알고리즘' 카테고리의 다른 글

[0620] 알고리즘  (0) 2021.06.21
[0615] 알고리즘  (0) 2021.06.16
[0612] 알고리즘  (0) 2021.06.13
[0611] 알고리즘  (0) 2021.06.12
[0608~0609] 알고리즘  (0) 2021.06.10