처음에는 다음과 같이 풀었다.
다음으로 푼 방법은 다음과 같다.
말로 표현하니 로직이 생각보다 복잡해보인다.
코드는 다음과 같이 표기한다.
import java.util.Arrays;
import java.util.Stack;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
Arrays.fill(answer, -1); // -1로 모든 배열의 수를 초기화
Stack<int[]> stack = new Stack<>(); // 스택에는 현재 수의 인덱스 - 현재 수를 배열로 만들어 넣는다.
for (int i = 0; i < numbers.length; i++) {
int number = numbers[i];
while (!stack.isEmpty()) {
if (stack.peek()[1] < number) {
answer[stack.pop()[0]] = number;
} else break;
}
stack.push(new int[]{i, number});
}
return answer;
}
}