μ΅œλŒ€ 1 λΆ„ μ†Œμš”

πŸ“ [D2_1859] 백만 μž₯자 ν”„λ‘œμ νŠΈ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
    static StringTokenizer st;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        // ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€
        int T = Integer.parseInt(br.readLine());

        for(int t=1; t<=T; t++){
            sb.append("#").append(t).append(" ");

            // μ—°μ†λœ 일 수
            int N = Integer.parseInt(br.readLine());

            int[] arr = new int[N];

            st = new StringTokenizer(br.readLine(), " ");
            for(int i=0; i<N; i++) {
                arr[i] = Integer.parseInt(st.nextToken());
            }

            int max = Integer.MIN_VALUE;
            long res = 0;

            for(int i =N-1; i>=0; i--){
                // 배열값이 더 큰 경우 μ΅œλŒ“κ°’μ΄ 바뀐닀
                if(max < arr[i]){
                    max = arr[i];
                }
                // 그렇지 μ•Šμ€ 경우 μ΅œλŒ“κ°’μ—μ„œ λ°°μ—΄ 값을 λΊ€ 값이 이득 λ³Έ κ°’
                else{
                    res += (max - arr[i]);
                }
            }

            sb.append(res);
            sb.append("\n");
        }
        System.out.println(sb);
    }
}

πŸ€” λ‚˜μ˜ 생각

μ²˜μŒμ— μ’€ 헀맀닀가 λ’€μ—μ„œ λΆ€ν„° 값듀을 λΉ„κ΅ν•΄μ„œ λ”ν•˜λŠ” 것을 κΉ¨λ‹¬μ•˜λ‹€.
κ·ΈλŸ¬λ‚˜ μ—¬κΈ°μ„œ N이 큰 μˆ˜κ°€ 되면 합듀이 int λ²”μœ„λ₯Ό λ„˜μ–΄κ°€μ„œ long으둜 ν•΄κ²°ν•΄ μ£ΌλŠ” 것도 ν•˜λ‚˜μ˜ 포인트 μ˜€λ‹€.
함정이 μ’€ μžˆλŠ” 문제인 것 κ°™λ‹€. 천천히 값듀을 잘 λ³΄λ©΄μ„œ ν‘Όλ‹€λ©΄ κ·Έλ ‡κ²Œ μ–΄λ €μš΄ λ¬Έμ œλŠ” μ•„λ‹ˆμ˜€λ˜ 것 κ°™λ‹€.