Java

프로그래머스: 뒤에 있는 큰 수 찾기

Daeryuk Kim 2024. 3. 11. 00:39

 

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        int[] result = new int[numbers.length]; // 결과를 저장할 배열
        Stack<Integer> stack = new Stack<>();
        
        for (int i = 0; i < numbers.length; i++) {
            // 스택이 비어있지 않고, 현재 숫자가 스택의 top에 있는 인덱스의 숫자보다 큰 경우
            while (!stack.isEmpty() && numbers[i] > numbers[stack.peek()]) {
                result[stack.pop()] = numbers[i]; // 뒷 큰수를 결과 배열에 저장
            }
            stack.push(i); // 현재 인덱스를 스택에 push
        }
        
        // 스택에 남아있는 인덱스는 뒷 큰수를 찾지 못한 원소들이므로 -1로 설정
        while (!stack.isEmpty()) {
            result[stack.pop()] = -1;
        }
        
        return result;
    }
    public static void main(String[] args) {
        int[] numbers = {9, 1, 5, 3, 6, 2};
        Solution sol = new Solution();
        int[] result = sol.solution(numbers);
        System.out.println(Arrays.toString(result));
        
    }
}

와... 경이롭다.

내가 짠 코드는 바로 시간 초과가 나버렸다.

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        int[] result = new int[numbers.length]; // 결과를 저장할 배열 초기화
        
        for (int i = 0; i < numbers.length; i++) {
            result[i] = -1; // 기본값으로 -1 설정
            for (int j = i + 1; j < numbers.length; j++) {
                if (numbers[i] < numbers[j]) {
                    result[i] = numbers[j]; // 자신보다 큰 첫 번째 수를 찾으면 저장
                    break; // 더 이상의 탐색은 필요 없으므로 반복문 탈출
                }
            }
        }
        return result;
    }
    public static void main(String[] args) {
        int[] numbers = {9, 1, 5, 3, 6, 2};
        Solution sol = new Solution();
        int[] result = sol.solution(numbers);
        System.out.println(Arrays.toString(result));
        
    }
}