[JAVA/LeetCode] Top 100 Liked Question:121. Best Time to Buy and Sell Stock

👀 문제

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

👊 도전

1. 설계

  1. 0번째 인덱스를 buy한다고 가정한다.
  2. buy보다 더 작은 값이 나오면 갱신한다.
  3. 아닐 경우, i로 판다고 가정하고 이윤을 계산한다.

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 *
 * @author HEESOO
 *
 */
class Solution {
    public int maxProfit(int[] prices) {
        if(prices.length<2) return 0; // 0 또는 1은 0리턴
        
        int buy=prices[0]; // 첫 번째는 buy
        int answer=0;
        for(int i=1;i<prices.length;i++){
            // 더 싸게 살 수 있으면 buy
            if(buy>prices[i]) buy=prices[i]; 
            // i로 판다고 가정했을 때 이윤 계산 및 max 체크
            else answer=Math.max(answer, prices[i]-buy);
        }
        
        return answer;
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 배열을 체크하며 buy보다 더 작은 값이 있다면 갱신, 아니라면 이익을 계산한다
    • buy=prices[0]으로 초기화한다. 처음 값으로 샀다고 가정한다.
    • 인덱스 1부터 체크하며 buy>prices[i]면 더 작은 값으로 산다.
    • 아니라면, 이익을 계산하고 기존 값과 비교하여 answer에 더 큰 값을 저장한다.

👏 해결 완료!