🟦/백준

[실버 2] 주식

진뚱이용 2023. 1. 20. 00:11

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

 

11501번: 주식

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

www.acmicpc.net

import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int T = Integer.parseInt(br.readLine());
        for (int i = 0; i < T; i++) {

            int N = Integer.parseInt(br.readLine());
            int[] stock_price = new int[N];

            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j = 0; j < N; j++) {
                stock_price[j] = Integer.parseInt(st.nextToken());
            }

            long answer = 0;
            int max_stock_price = 0;
            for (int index = N - 1; index >= 0; index--) {
                if (max_stock_price < stock_price[index]) {
                    max_stock_price = stock_price[index];
                } else {
                    answer = answer + (max_stock_price - stock_price[index]);
                }
            }
            bw.write(answer + "\n");

        }
        bw.flush();
        bw.close();
    }
}

가장 비싼 날을 찾아서 그 앞날을 전부 판매
그 뒤 인덱스부터 또 비싼 날을 찾아서
그 앞날을 전부 판매 반복

그냥 뒤에서부터 max 갱신하며 팔아치우기
O(N)