CS 라이프
[LeetCode#121] Best Time to Buy and Sell Stock
트리피샌프란
2022. 11. 30. 10:36
[문제]
[문제 이해]
List가 주어졌을 때, 가장 쌀 때 사서 가장 비쌀 때 파는 가격을 구해라.
[정답 분석]
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를 리턴한다
[반성반성]
- 냅다 for문 두 개 때리기 전에 생각을 좀 해볼 것
- 리턴할 값 / 비교할 값 변수 선언 생각
- 최솟값 지정에는 Integer.MAX_VALUE 사용