프로그래머스 연습문제 뒤에 있는 큰 수 찾기 [JAVA] - 23년 2월 12일

Denia·2023년 2월 12일
0

코딩테스트 준비

목록 보기
151/201

첫 풀이

//자신보다 크면서 , 가장 가까이 있는 수 => 뒷 큰수
//뒷 큰수의 배열
//존재하지 않으면 -1을 담는다.

import java.util.Stack;

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

        Stack<Number> stack = new Stack<>();

        for (int i = 0; i < numbers.length; i++) {
            if (stack.isEmpty()) {
                stack.push(new Number(numbers[i], i));
                continue;
            }
            
            while (!stack.isEmpty() && numbers[i] > stack.peek().num) {
                Number top = stack.pop();
                answer[top.idx] = numbers[i];
            }

            stack.push(new Number(numbers[i], i));
        }

        while (!stack.isEmpty()) {
            Number top = stack.pop();
            answer[top.idx] = -1;
        }

        return answer;
    }
}

class Number {
    int num;
    int idx;

    public Number(int num, int idx) {
        this.num = num;
        this.idx = idx;
    }
}

코드 리팩토링

//자신보다 크면서 , 가장 가까이 있는 수 => 뒷 큰수
//뒷 큰수의 배열
//존재하지 않으면 -1을 담는다.

import java.util.Arrays;
import java.util.Stack;

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

        Arrays.fill(answer, -1);

        Stack<Integer> stack = new Stack<>();

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

            stack.push(arrIdx);
        }

        return answer;
    }
}

profile
HW -> FW -> Web

0개의 댓글