https://school.programmers.co.kr/learn/courses/30/lessons/42584
스택을 이용. 스택에 들어가는 값 int[]에 [0]는 prices의 값을, [1]에는 해당 값의 인덱스를 넣었다.
스택을 peek()한 값이 prices[i] 보다 클 경우 스택에서 값을 제거하고 정답 배열에 현제 인덱스 - 저장된 인덱스를 저장한다.
그리고 for문 이후 모든 값이 스택에 들어가거나 정리가 되면 스택이 비어질때까지 전체 길이 - 저장된 인덱스 - 1(0부터 시작하기 때문에)을 해주었다.
import java.util.Arrays;
import java.util.Stack;
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<int[]> st = new Stack<>();
for (int i = 0; i < prices.length; i++) {
while (!st.isEmpty() && st.peek()[0] > prices[i]) {
int[] value = st.pop();
answer[value[1]] = i - value[1];
}
int[] value = new int[2];
value[0] = prices[i];
value[1] = i;
st.push(value);
}
while (!st.isEmpty()) {
int[] value = st.pop();
answer[value[1]] = prices.length - value[1] - 1;
}
return answer;
}
}
'Programmers' 카테고리의 다른 글
[프로그래머스][JAVA]Lv. 2 - 기능개발 (0) | 2023.05.16 |
---|---|
[프로그래머스][JAVA]Lv. 2 - 다리를 지나는 트럭 (0) | 2023.05.15 |
[프로그래머스][JAVA]Lv. 2 - 의상 (0) | 2023.05.02 |
[프로그래머스][JAVA]Lv. 2 - 전화번호 목록 (0) | 2023.05.02 |
[프로그래머스][JAVA]Lv. 2 - n진수 게임 (1) | 2023.04.27 |