본문 바로가기

CS 라이프

[LeetCode#121] Best Time to Buy and Sell Stock

[문제]

[문제 이해]

List가 주어졌을 때, 가장 쌀 때 사서 가장 비쌀 때 파는 가격을 구해라.


[정답 분석]

https://leetcode.com/problems/best-time-to-buy-and-sell-stock/solutions/1735493/java-c-best-ever-explanation-could-possible/?envType=study-plan&id=level-1&orderBy=most_votes&languageTags=java

 

 

int lsf = Integer.MAX_VALUE;  // least so far
int op = 0;     // overall profit
int pist = 0;   // profit if sold today

for(int i = 0; i < prices.length; i++){
    if(prices[i] < lsf){     // if we found new buy value which is more small
        lsf = prices[i];     // update our least so far
    }
    pist = prices[i] - lsf;  // calculating profit if sold today by, Buy -
    if(op < pist){           // if pist is more than our previous overall profit
        op = pist;           // update overall profit
    }
}
return op;
  • 리스트에서 최대 값을 모를 때, 우선은 Integer.MAX_VALUE 를 통해서 최솟값을 지정한다. 최댓값이야 0로 점점 크게 비교하면 되지만 최솟값은 Integer.MAX_VALUE를 쓰자
  • 리턴할 값 op  --- 계속 바뀔 수 있는 값
  • 오늘 만약 팔았을 때 얻는 값
  • if(prices[i] < lsf) --- 지금까지 발견한 가장 작은 값보다 리스트에서 더 작은 값을 발견하면 갈아끼우자! 
  • pist = price[i] - lsf --- 만약에 오늘 이걸 팔면 얼마를 받는지 확인
  • if(op<pist) --- 지금까지의 이윤이 오늘 이윤보다 더 크면 op 갈아끼우자 (최댓값 찾을 땐 0부터 시작)
  • 가장 큰 이윤인 op를 리턴한다

[반성반성]

  1. 냅다 for문 두 개 때리기 전에 생각을 좀 해볼 것
  2. 리턴할 값 / 비교할 값 변수 선언 생각
  3. 최솟값 지정에는 Integer.MAX_VALUE 사용