[문제]
[문제 이해]
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 사용
'CS 라이프' 카테고리의 다른 글
이번에도 힘들었던 인턴십 구하기 여정 - 합격 전 (1) | 2024.03.22 |
---|---|
[Teaching Assistant] 조교 일 얻기 & 학교 온보딩 프로세스 (1) | 2023.02.04 |
[OOP_Lab5] Huffman coding (recursive methods) - 1편 (0) | 2022.10.27 |
[LeetCode#724] Find Pivot Index (1) | 2022.10.27 |
우당탕탕 LeetCode 스터디 그룹 결성하기 (0) | 2022.10.11 |