문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/154539?language=java
이 문제는 스택을 이용하여 풀 수 있습니다. 사실 이 문제는 백준의 오큰수 문제(https://velog.io/@gale4739/%EB%B0%B1%EC%A4%80-17298-%EC%98%A4%ED%81%B0%EC%88%98Java)와 풀이가 완전히 유사합니다. 인덱스를 스택에 저장한 후 다음 숫자가 스택의 피크보다 크다면 스택이 비거나 작을 때까지 스택을 계속 pop하여 다음 숫자값을 해당 인덱스에 넣어주시면 됩니다.
다음은 풀이입니다.
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
Arrays.fill(answer,-1);
Stack<Integer> stack = new Stack<>();
for(int i=0;i<numbers.length;i++){
if(!stack.isEmpty()){
while(!stack.isEmpty()){
if(numbers[stack.peek()] < numbers[i]) answer[stack.pop()] = numbers[i];
else break;
}
}
stack.add(i);
}
return answer;
}
}