https://school.programmers.co.kr/learn/courses/30/lessons/154539
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
스택을 활용하면 쉽게 풀 수 있다.
다만 스택에 넣는 숫자는 numbers의 숫자가 아닌, numbers의 인덱스 값이어야 쉽게 풀 수 있다.
스택에 담긴 인덱스들을 순회하면서 n번째 숫자가 해당 인덱스의 숫자보다 큰지 비교하고,
큰 숫자를 만나기 전까지 다시 스택에 쌓아준다.
스택에 담긴 인덱스 위치의 숫자들은 알아서 내림차순이 될 것이기때문에,
스택에 마지막 인덱스 위치의 숫자값이 처리되지 않는다면, 그 전의 인덱스 위치의 숫자값은 자연히 체크할 필요가 없으므로 break 처리해주는걸 주의.
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
Stack<Integer> idxs = new Stack();
int[] answer = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) answer[i] = -1;
for (int i = 0; i < numbers.length; i++) {
int next = numbers[i];
while(!idxs.isEmpty()) {
int prev = idxs.pop();
if (numbers[prev] < next) {
answer[prev] = next;
} else {
idxs.push(prev);
break;
}
}
idxs.push(i);
}
return answer;
}
}