본문 바로가기
Algorithm/알고리즘 문제풀이

LeetCode 121(Best Time to Buy and Sell Stock, java)

by devraphy 2022. 4. 12.

0. 문제

https://leetcode.com/problems/best-time-to-buy-and-sell-stock/

 

Best Time to Buy and Sell Stock - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

1. 문제 설명

- 문제에서 1개의 배열(prices)이 주어진다.

- 각 배열의 원소는 매일의 주식 가격을 의미한다. ex) prices[0] = 첫째 날의 주식 가격, prices[1] = 둘째 날의 주식 가격

- 주식을 구매하고 판매하여 만들 수 있는 가장 큰 수익을 찾는 것이 문제의 핵심이다. 

- 다만, 미래의 주식을 과거에 팔 수 없다. 

 

2. 문제 해설

- 오늘 주식 가격을 prices[0]이라고 가정할 때, 미래 시점의 주식 가격 중 가장 큰 가격을 찾아야 한다.

- 그러므로 (오늘 주식 가격 - 내일 주식 가격)을 기본 판단 조건으로 사용한다.

- 연산 결과가 음수라면, 내일 주식 가격이 오늘 주식 가격보다 낮은 것이므로 내일 주식 가격을 구매시점으로 판단한다.

- 연산 결과가 양수라면, 수익이 발생한 것이므로 이를 저장한다. 

- 연산 결과가 양수일 때마다 기존의 수익과 비교하여 최대 수익을 찾는다. 

 

3. 정답 코드

class Solution {
    public int maxProfit(int[] prices) {
        int current = prices[0];
        int maxProfit = 0;

        for(int i = 1; i < prices.length; i++) {
            
            int temp = prices[i] - current;
            if(temp < 0) {
                current = prices[i];
            } 
            else {
                maxProfit = Math.max(maxProfit, temp);
            }
        }
        return maxProfit;
    }
}

 

댓글