문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/154539
제한 사항
입출력 예
풀이
import java.util.Stack;
class Solution {
public int[] solution(int[] numbers) {
Stack<Integer> savedIndexes = new Stack<>();
for (int i = 0; i < numbers.length; i++) {
if (savedIndexes.isEmpty() || numbers[savedIndexes.peek()] >= numbers[i]) {
savedIndexes.push(i);
continue;
}
while(!savedIndexes.isEmpty() && numbers[savedIndexes.peek()] < numbers[i]) {
numbers[savedIndexes.pop()] = numbers[i];
}
savedIndexes.push(i);
}
while (!savedIndexes.isEmpty()) {
numbers[savedIndexes.pop()] = -1;
}
return numbers;
}
}
후기
이 문제도 어떻게 풀어야 할지 많이 고민했다. 참고로 단순한 방법인 2중 for문으로 풀면 통과하지 못한다. 결국 잘 안 떠올라서 질문하기에 있는 제목만 읽고 힌트를 좀 얻었다. (사실 답을 안거랑 다름이 없긴 하다;;) 어쨌든 스택으로 순회하다가 스택의 마지막 숫자와 비교해 해당 인덱스의 numbers값이 크다면 해당 numbers 값보다 작은 스택의 숫자들을 꺼내면서 값을 갱신하면 된다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
[프로그래머스][JAVA][Lv. 0] 저주의 숫자 3 (0) | 2023.10.10 |
---|---|
[프로그래머스][JAVA][Lv. 2] 방문 길이 (0) | 2023.10.09 |
[프로그래머스][JAVA][Lv. 2] 모음사전 (0) | 2023.10.07 |
[프로그래머스][JAVA][Lv. 0] 전국 대회 선발 고사 (0) | 2023.10.06 |
[프로그래머스][JAVA][Lv. 0] 특이한 정렬 (0) | 2023.10.05 |