https://school.programmers.co.kr/learn/courses/30/lessons/42584
언제나 쉽게 생각하자. 쉽게 생각해서 바로 풀리는 경우도 있다.
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
for(int i = 0; i < prices.length; i++){
for(int j = i + 1; j < prices.length; j++){
answer[i]++;
if(prices[i] > prices[j])
break;
}
}
return answer;
}
}
풀이가 좀 어려운데
참고 풀이 여기를 보면 좀 이해가 빠를 수 있다.
해당 위치에서의 값이 ✨언제 떨어지는지가 포인트이기 때문에 stack에 담아두었다가 peek한 값이 자기보다 클 경우 ✨그 차이 만큼을 answer배열에 담아두는 것이다.
import java.util.*;
class Solution {
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[stack.peek()] > prices[i]){
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;
}
}