문제 풀이/프로그래머스

[프로그래머스] 뒤에 있는 큰 수 찾기(JAVA)

27200 2025. 1. 15. 12:21

문제

https://school.programmers.co.kr/learn/courses/30/lessons/154539


풀이(40분)

import java.util.*;


class Solution {
    public int[] solution(int[] numbers) {
        Stack<Integer> stack = new Stack<>();
        int[] answer = new int[numbers.length];

        Arrays.fill(answer, -1);

        for (int i = 0; i < numbers.length; i++)
            while (!stack.isEmpty() && numbers[stack.peek()] < numbers[i]) {
                answer[stack.pop()] = numbers[i];
            }
            stack.push(i);
        }
        return answer;
    }
}

 

초기 뒤에 있는 것중 자기보다 큰 수 중 가장 작은 것을 찾는 문제인줄 알고 이분탐색으로 풀었으나 아니었고, 스택을 사용했다.

 

스택을 사용하면서 쓴 가장 중요한 아이디어는 일반적으로 스택에 값을 직접 넣지만 이번엔 인덱스를 넣는다는 것!

 

문제의 예시인 2 3 3 5로 입력이 들어왔을 때를 생각해보자.

 

1. 처음에 2가 들어온다. 스택이 비어있기 때문에 일단 넣는다. 이 때 값을 넣는 것이 아닌 인덱스인 0을 넣는다.

2. 3이 들어온다. 스택은 차있고, peek인덱스는 0이고, 값은 2다. 자기 자신은 3이고 인덱스는 1이다.

2-1. 2 < 3이 되므로 스택을 팝하고, 값을 numbers[i]인 3으로 넣어준다.

 

이 과정을 반복하면 된다.