본문 바로가기
자료구조 & 알고리즘/문제 풀이 (프로그래머스)

뒤에 있는 큰 수 찾기

by 정구정구 2026. 6. 17.

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

첫 풀이 (case 20 ~ 23 실패 -> 시간 초과)

class Solution {
    public int[] solution(int[] numbers) {
        
        int[] answer = new int[numbers.length];

        for (int i = 0; i < numbers.length; i++) {

            if (i == numbers.length - 1) {
                answer[i] = -1;
                break;
            }

            for (int j = i+1; j < numbers.length; j++) {

                if (numbers[i] < numbers[j]) {
                    answer[i] = numbers[j];
                    break;
                }
                if (j == numbers.length - 1)
                    answer[i] = -1;
            }
        }        
        
        return answer;
    }
}

 

일단 문제도 파악할 겸, 가장 쉽게 생각 할 수 있는 2중 for문으로 코드를 했다. O(N^2) 이므로 당연히 시간 초과가 난다. 

 

 

트러블 슈팅

시간 복잡도를 줄이기 위해서 뒷 큰 수를 찾는 2번째 for문을 개선해야 한다!!

 프로그래머스를 풀 때, 제한 시간을 걸고 문제풀이를 하는데, 이 문제는 시간 내에 풀질 못 했다. 사람들의 풀이를 보니, 배열을 오른쪽에서 부터 돌면서 stack에 뒷 수들을 푸시하고 앞으로 비교 할 필요 없는 숫자들을 팝 하면서 뒷 수 순회를 줄이는 방법을 쓴 것을 확인 할 수 있었다.

 

 

새로운 알고리즘

1. 스택을 만듬

2. numbers 배열을 뒤부터 앞으로 순회

3. 현재 비교 중인 숫자 (numbers[i])와 스택에 저장된 숫자들을 비교

4. numbers[i]보다 작은 숫자는 모두 제거, 큰 숫자는 answer 배열에 추가 (스택에 큰 숫자가 없다면 -1 추가)

5. numbers를 모두 순회 했다면 answer 배열 리턴

 

 

수정된 코드 (성공)

import java.util.*;

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

        for (int i = numbers.length - 1; i >= 0; i--) {

            // 스택에서 현재 비교값보다 작은 숫자 모두 제거
            while (!stack.isEmpty() && stack.peek() <= numbers[i]) {
                stack.pop();
            }            
			
            if (!stack.isEmpty()) {
            // 스택이 남았다는건 큰 수를 찾았다는 것
                answer[i] = stack.peek();
            }
            else {
             // 큰 수 못 찾음
                answer[i] = -1;
            }

            stack.push(numbers[i]);
        }

        return answer;
    }
}

 

   

 

 

 

 

'자료구조 & 알고리즘 > 문제 풀이 (프로그래머스)' 카테고리의 다른 글

가장 큰 수  (0) 2026.06.22
다리를 지나가는 트럭 (큐)  (0) 2026.06.19
롤케이크 자르기  (0) 2026.06.18
주차 요금 계산  (0) 2026.06.15
k진수에서 소수 개수 구하기  (0) 2026.06.12