본문 바로가기
알고리즘 문제풀이/백준

[백준 11501] 주식

by m2162003 2020. 12. 31.

www.acmicpc.net/problem/11501

 

11501번: 주식

입력의 첫 줄에는 테스트케이스 수를 나타내는 자연수 T가 주어진다. 각 테스트케이스 별로 첫 줄에는 날의 수를 나타내는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고, 둘째 줄에는 날 별 주가를 나타

www.acmicpc.net

그리디 알고리즘을 사용한다.

문제 예시에서도 잠깐 비춰지지만 수열 전체가 오름차순이면 사서 파는게 이득이고 수열 전체가 내림차순이면 존버가 이득이다.

 

수열 전체가 내림차순인지 오름차순인지 앞에서 부터 순열을 돌아선 알 수 없다. 따라서 맨 뒤부터 숫자를 확인한다.

 

순열이 오름차순일수도 내림차순일수도 오르락 내리락 할수도 있다. 아마 대부분 오르락 내리락 할 것이다.

그렇다면 뒤에서 숫자를 확인하며 최댓값과 비교한다.

만약 최댓값보다 큰 수가 등장한다면 최댓값을 갱신한다.

최댓값보다 작은 숫자가 등장한다면그 차를 더한다.

#include <stdio.h>
#include <vector>

using namespace std;
int t, n;
int arr[1000000];
long long ans;
long long m;
int main(void)
{
  scanf("%d", &t);
  while (t--)
  {
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
      scanf("%d", &arr[i]);
    }

    m = -1;
    ans = 0;
    for (int i = n - 1; i > -1; i--)
    {
      if (m < arr[i])
      {
        m = arr[i];
      }
      else
      {
        ans += (m - arr[i]);
      }
    }

    printf("%lld\n", ans);
  }

  return 0;
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 17392] 우울한 방학  (0) 2020.12.31
[백준 16112] 5차 전직  (0) 2020.12.31
[백준 1753] 최단경로  (0) 2020.12.30
[백준 2448] 별 찍기 - 11  (0) 2020.12.29
[백준 5567] 결혼식  (0) 2020.12.29

댓글