문제 설명
정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
제한사항
4 ≤ numbers의 길이 ≤ 1,000,000
1 ≤ numbers[i] ≤ 1,000,000
풀이
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
int max = 0;
Stack<Integer> st = new Stack<>();
for(int i=numbers.length-1; i>=0; i--){
// st에 없는 경우 -1
if(st.size()==0||max<numbers[i]){
st.clear();
st.push(numbers[i]);
max=numbers[i];
answer[i]=-1;
continue;
}
while(st.peek()<=numbers[i]){
st.pop();
if(st.size()==0) break;
}
if(st.size()==0){
st.push(numbers[i]);
max=numbers[i];
answer[i]=-1;
continue;
}
answer[i]=st.peek();
st.push(numbers[i]);
}
return answer;
}
}
간단한 풀이 방법
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
Arrays.fill(answer, -1);
int max = 0;
Stack<Integer> st = new Stack<>();
for(int i=numbers.length-1; i>=0; i--){
while(!st.isEmpty()){
if(numbers[i]<st.peek()){
answer[i]=st.peek();
break;
}
st.pop();
}
st.push(numbers[i]);
}
return answer;
}
}
'programmers' 카테고리의 다른 글
[JAVA] 튜플 - compare 등 (0) | 2024.07.19 |
---|---|
[JAVA] △ 주식가격 (0) | 2024.07.19 |
[JAVA] 시소짝꿍 (0) | 2024.07.18 |
[JAVA] 광물 캐기 (0) | 2024.07.18 |
[JAVA] 마법의 엘리베이터 (0) | 2024.07.18 |