정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
코드
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
Stack<Integer> stack = new Stack<>();
int[] answer = new int[numbers.length];
Arrays.fill(answer, -1);
stack.push(0);
for(int i=1;i<numbers.length;i++){
while(!stack.isEmpty()&&numbers[stack.peek()]<numbers[i]){
answer[stack.pop()] =numbers[i];
}
stack.push(i);
}
return answer;
}
}
스택을 사용하면 간단히 풀리는 문제였다. 맨 처음에 for문과 ArrayList를 통해서 풀어보려고 했으나 20번쯤에서 시간초과가 떴다. 너무 많은 계산을 해서 그런것같은데..
스택에 값이아닌 인덱스 번호를 넣어 인덱스 번호를 통해 이후값과 비교하여 크다면 answer에 값을 넣고 스택으로 이동. 아니라면 그냥 스택으로 이동.
이후 딱히 -1을 넣지않고 먼저 -1로 채워넣는 방식으로 해도 상관이 없는 문제였다.