본문 바로가기

카테고리 없음

뒤에 있는 큰 수 찾기

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;
    }
}