이번에 풀어본 문제는
프로그래머스 뒤에 있는 큰 수 찾기
입니다.
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
Stack<Integer> stk = new Stack<>();
int size = numbers.length;
int [] answer = new int[size];
stk.push(0);
for (int i = 1; i < size; i++) {
while (!stk.isEmpty() && numbers[stk.peek()] < numbers[i]) {
answer[stk.pop()] = numbers[i];
}
stk.push(i);
}
while (!stk.isEmpty()) answer[stk.pop()] = -1;
return answer;
}
}
answer 배열에 가장 먼저 마주치는 자신보다 큰 값을 담아야 하므로, 0번 인덱스부터 순차적으로 탐색하며 answer 배열의 인덱스가 될 값을 스택에 담은 후, 나보다 큰 수가 등장했을 때 pop해주면 해결할 수 있습니다.