개발/Algorithm
프로그래머스 - 주식가격
보리ing
2021. 3. 9. 12:03
programmers.co.kr/learn/courses/30/lessons/42584
@Test
void stockPrice(){
int[] prices = new int[] { 2, 1, 2, 3, 1, 2, 4, 3 };
int[] result = solution(prices);
System.out.println(Arrays.toString(result));
}
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<int[]> stack = new Stack<>();
for (int i = prices.length - 2; i >= 0; i--) {
//앞의 가격이 더 클 경우 일수는 1,
//앞으로 비교하게 될 값
if (prices[i] > prices[i+1]){
answer[i] = 1;
int[] lowerPriceAndIdx = new int[] { prices[i+1],i+1};
stack.push(lowerPriceAndIdx);
} else {
//앞이 더 낮은 경우 뒤에 나오는 낮은 가격과 비교 <- 저장된 스택과 비교
while (!stack.isEmpty() && prices[i] <= stack.peek()[0]) {
//이후 이 값이 최저가격 기준이 될 것이기 때문에 고려하지 않아도 될 현재보다 큰 값들은 삭제
stack.pop();
}
//stack이 비었다는 것은 현재 가격이 가장 작은 것!
if (stack.isEmpty()){
answer[i] = prices.length - i -1;
} else { //stack까지 일수
answer[i] = stack.peek()[1] - i;
}
}
}
return answer;
}