SWEA

SWEA 1859 백만 장자 프로젝트

리콜 2023. 11. 3. 16:48

 

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

매 테스트 케이스 마다 N일 동안 물건의 가격이 주어지고

싼날에 사서 비산날에 파는 구조이다.

첫날 부터 마지막 날까지 비싼 가격에서 싼가격으로 끝나면

이익을 볼수 없으므로 0의 이익을 취하게 되고

 

3일동안 1,2,3의 매매가라면

1에서 하나사고 2에서 하나사서 3에 팔아 3의 이익을 얻을 수 있다.

 

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

public class Solution {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T;
        T= Integer.parseInt(br.readLine());

        for(int test_case = 1; test_case <= T; test_case++)
        {
            int n = Integer.parseInt(br.readLine());
            int[] days = new int[n];
            int max = Integer.MIN_VALUE;
            long sum= 0;
            StringTokenizer st = new StringTokenizer(br.readLine()," ");
            for(int i = 0;i<n;i++){ //전부 넣기
                days[i] = Integer.parseInt(st.nextToken());
            }
            for(int i= n-1;i >= 0; i--){ //뒤에서 부터
                if(days[i] > max){
                    max = days[i];
                }
                if(i != n-1){
                    sum += max - days[i];
                }
            }
            StringBuilder sb = new StringBuilder();
            sb.append("#").append(test_case).append(" ").append(sum);
            System.out.println(sb);
        }
    }
}

 

뒤에서 부터 진행하여 비싼 날을 비교하여 저장하고 

최고가에서 해당 날짜의 매매가를 빼 결과 값에 계속 더해주었다.

언제든 판매할수 있다는 조건 덕분에 가능하였고

 

처음에 10개의 테스트케이스중 7개만 맞았었는데

input.txt를 열어 확인해보니 숫자가 엄청 많이 넣는다는 것을 알게 되었고 

sum을 long으로 바꾸어 주었다.

 

반응형