
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
문제 풀이
해당 문제를 보고 이해하는 것이 힘들어 다른 분이 해석해주신 문제를 보고 풀었다.
https://school.programmers.co.kr/questions/20326?question=20326
현재 인덱스를 기준으로 현재 인덱스와 다음 인덱스 별로 확인하여 가격이 떨어지지 않았으면 그 시간이 몇초인지를 계산하는 문제로 만약 다음 인덱스가 가격이 떨어졌고, 그 다음 인덱스에서는 올랐다면 현재에서 다음까지로 가는 1초만 주가가 유지했던 것으로 인지하여 문제를 풀었다.
코드
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < prices.length; i++) {
while (!stack.isEmpty() && prices[i] < prices[stack.peek()]) {
int index = stack.pop();
answer[index] = i - index;
}
stack.push(i);
}
while (!stack.isEmpty()) {
int index = stack.pop();
answer[index] = prices.length - index - 1;
}
return answer;
}