개발/Algorithm

[백준 11501 with JAVA] 주식

Dane.Kim 2023. 12. 15.

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

 

11501번: 주식

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

www.acmicpc.net

 

주어진 숫자들을 비교해가며 가장 많은 이익을 남겨 판매하는 것이 목표이다.

 

역방향 탐색으로 뒤에서부터 비교해서, 더 큰 수가 나오면 그 전 까지 판매하여 이익을 내는 식으로,

 

이익의 총합을 구하면 되는 문제.

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

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        
        int T = Integer.parseInt(br.readLine());
        int[] num;

		for(int i=0;i<T;i++){
            int N = Integer.parseInt(br.readLine());
            long answer = 0;
            st = new StringTokenizer(br.readLine()," ");
            num = new int[N];
            for(int j=0;j<N;j++)
                num[j] = Integer.parseInt(st.nextToken());
            int max = num[N-1];	
            
            for(int j=N-2;j>=0;j--) {
                if(num[j] <= max)	
                    answer += max - num[j];
                else		
                    max = num[j];
            }
            bw.write(answer + "\n");	
        }
        bw.flush();		
        bw.close();
        br.close();
    }
}

 

 

 

댓글