πŸ•οΈ ICPC Sinchon/Greedy

[BOJ][C++] λ°±μ€€ 11501번: 주식

선달 2023. 1. 31. 21:59
λ°˜μ‘ν˜•

https://www.acmicpc.net/problem/11501

 

11501번: 주식

μž…λ ₯의 첫 μ€„μ—λŠ” ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μžμ—°μˆ˜ Tκ°€ 주어진닀. 각 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ λ³„λ‘œ 첫 μ€„μ—λŠ” λ‚ μ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μžμ—°μˆ˜ N(2 ≤ N ≤ 1,000,000)이 주어지고, λ‘˜μ§Έ μ€„μ—λŠ” λ‚  별 μ£Όκ°€λ₯Ό λ‚˜νƒ€

www.acmicpc.net

 

문제

ν™μ€€μ΄λŠ” μš”μ¦˜ 주식에 λΉ μ Έμžˆλ‹€. κ·ΈλŠ” 미래λ₯Ό λ‚΄λ‹€λ³΄λŠ” 눈이 λ›°μ–΄λ‚˜, λ‚  λ³„λ‘œ μ£Όκ°€λ₯Ό μ˜ˆμƒν•˜κ³  μ–Έμ œλ‚˜ 그게 λ§žμ•„λ–¨μ–΄μ§„λ‹€. 맀일 κ·ΈλŠ” μ•„λž˜ μ„Έ 가지 쀑 ν•œ 행동을 ν•œλ‹€.

  1. 주식 ν•˜λ‚˜λ₯Ό μ‚°λ‹€.
  2. μ›ν•˜λŠ” 만큼 가지고 μžˆλŠ” 주식을 νŒλ‹€.
  3. 아무것도 μ•ˆν•œλ‹€.

ν™μ€€μ΄λŠ” 미래λ₯Ό μ˜ˆμƒν•˜λŠ” λ›°μ–΄λ‚œ μ•ˆλͺ©μ„ κ°€μ‘Œμ§€λ§Œ, μ–΄λ–»κ²Œ ν•΄μ•Ό μžμ‹ μ΄ μ΅œλŒ€ 이읡을 얻을 수 μžˆλŠ”μ§€ λͺ¨λ₯Έλ‹€. λ”°λΌμ„œ λ‹Ήμ‹ μ—κ²Œ λ‚  λ³„λ‘œ μ£Όμ‹μ˜ 가격을 μ•Œλ €μ£Όμ—ˆμ„ λ•Œ, μ΅œλŒ€ 이읡이 μ–Όλ§ˆλ‚˜ λ˜λŠ”μ§€ 계산을 해달라고 λΆ€νƒν–ˆλ‹€.

예λ₯Ό λ“€μ–΄ λ‚  μˆ˜κ°€ 3일이고 λ‚  λ³„λ‘œ μ£Όκ°€κ°€ 10, 7, 6일 λ•Œ, μ£Όκ°€κ°€ 계속 κ°μ†Œν•˜λ―€λ‘œ μ΅œλŒ€ 이읡은 0이 λœλ‹€. κ·ΈλŸ¬λ‚˜ λ§Œμ•½ λ‚  λ³„λ‘œ μ£Όκ°€κ°€ 3, 5, 9일 λ•ŒλŠ” 처음 두 날에 주식을 ν•˜λ‚˜μ”© 사고, λ§ˆμ§€λ§‰λ‚  λ‹€ νŒ”μ•„ 버리면 이읡이 10이 λœλ‹€.

μž…λ ₯

μž…λ ₯의 첫 μ€„μ—λŠ” ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μžμ—°μˆ˜ Tκ°€ 주어진닀. 각 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ λ³„λ‘œ 첫 μ€„μ—λŠ” λ‚ μ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μžμ—°μˆ˜ N(2 ≤ N ≤ 1,000,000)이 주어지고, λ‘˜μ§Έ μ€„μ—λŠ” λ‚  별 μ£Όκ°€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” N개의 μžμ—°μˆ˜λ“€μ΄ 곡백으둜 κ΅¬λΆ„λ˜μ–΄ μˆœμ„œλŒ€λ‘œ 주어진닀. λ‚  별 μ£Όκ°€λŠ” 10,000μ΄ν•˜λ‹€.

좜λ ₯

각 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ λ³„λ‘œ μ΅œλŒ€ 이읡을 λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ ν•˜λ‚˜λ₯Ό 좜λ ₯ν•œλ‹€. 닡은 λΆ€ν˜ΈμžˆλŠ” 64bit μ •μˆ˜ν˜•μœΌλ‘œ ν‘œν˜„ κ°€λŠ₯ν•˜λ‹€.

 

풀이

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    
    int t;
    cin >> t;
    while(t--) {
        int n;
        cin >> n;
        vector<int> v(n);
        for(int i=0; i<n; i++)
            cin >> v[i];
        
        int cur=0;
        long long money=0;
        for(int i=n-1; i>=0; i--) {
            if(v[i] > cur) {
                cur = v[i];
            } else {
                money += cur - v[i];
            }
        }
        cout << money << "\n";
    }
    
    return 0;
}

/*
 */
λ°˜μ‘ν˜•