카테고리 없음
[JAVA] 프로그래머스 Lv.2 뒤에 있는 큰 수 찾기
빌럽스
2023. 12. 20. 12:49
[문제]
정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
제한사항
- 4 ≤ numbers의 길이 ≤ 1,000,000
- 1 ≤ numbers[i] ≤ 1,000,000
입출력 예numbersresult
[2, 3, 3, 5] | [3, 5, 5, -1] |
[9, 1, 5, 3, 6, 2] | [-1, 5, 6, 6, -1, -1] |
[풀이방법]
1. 처음엔 배열을 통해 제시된 그대로 코드를 작성하였으나, 시간초과로 마지막 4개 항목을 통과하지 못했다. 삽입 및 삭제가 느린 배열의 특징때문에 시간초과가 발생한 것 같다.
2. Stack을 활용했다. number 배열의 뒤의 숫자부터 조회 및 이를 stack에 추가했다. number의 숫자와 stack의 숫자를 비교하여 작은 숫자는 pop을 통해 제거했다.
[코드]
public static int[] solution(int[] numbers) {
Stack<Integer> stack = new Stack<>();
int[] answer = new int[numbers.length];
for (int i = numbers.length-1; i >= 0; i--) {
while (!stack.isEmpty()) {
if (stack.peek() > numbers[i]) {
answer[i] = stack.peek();
break;
}
else {
stack.pop();
}
}
if (stack.isEmpty()) {
answer[i] = -1;
}
stack.push(numbers[i]);
}
return answer;
}