
처음에는 이중 for문으로 접근하였지만 역시나 시간복잡도가 높아져 실패했다.
이후에 스택을 사용하여 문제를 해결했다.
스택을 이용하여 배열을 역순으로 처리하면서 현재 숫자보다 큰 값을 찾으면 된다.
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
Stack<Integer> stack = new Stack<>();
// 배열을 역순으로 처리
for (int i = numbers.length - 1; i >= 0; i--) {
// 스택에서 현재 숫자보다 작거나 같은 값 제거
while (!stack.isEmpty() && stack.peek() <= numbers[i]) {
stack.pop();
}
// 뒷 큰 수 결정
if (stack.isEmpty()) {
answer[i] = -1;
} else {
answer[i] = stack.peek();
}
// 현재 숫자를 스택에 추가
stack.push(numbers[i]);
}
return answer;
}
}