[LeetCode] Best Time to Buy and Sell Stock

myminimin·2023년 8월 8일
0

가장 싼 값에 구입한 뒤 가장 비쌀 때 팔아 최대 이익이 얼마인지를 구하는 문제이다!

예제의 1번을 보면 가격이 가장 싼 2day에 1에 구입해 가장 비싼 5day의 6에 판매해 이익이 5가 된다. (7은 2day보다 앞 순서이기 때문에 구입할 수 없다)

예제의 2번을 보면 가장 마지막 날에 가격이 싸기 때문에 구입하지 못해서 (= 배열의 마지막이기 때문에 뒤에 팔 날이 없다) 이익이 0으로 출력된다.

class Solution {
    public int maxProfit(int[] prices) {
        int minPrice = Integer.MAX_VALUE;
        int maxProfit = 0;
        
        for (int price : prices) {
            minPrice = Math.min(minPrice, price);
            maxProfit = Math.max(maxProfit, price-minPrice);
        }
        return maxProfit;
    }
}

int minPrice = Integer.MAX_VALUE; 를 한 이유는 주식의 가격이 음수가 아니라 양수이기 때문이다. 초기화를 음수의 가장 큰 값으로 하게되면 나중에 큰 오류가 발생할 수 있기 때문에 양수의 가장 큰 값으로 초기화를 해야 한다.

그리고 minPrice = Math.min(minPrice, price) 에서 가장 작은 값을 minPrice에 넣고

maxProfit = Math.max(maxProfit, price-minPrice) 에서 price-minPrice 현재 가격 - 가장 작은 값 을 통해 현재 이익을 구하고 현재까지의 최대 이익과 비교해서 더 큰 값을 maxProfit에 넣으면 된다!

0개의 댓글