programmers_뒤에 있는 큰 수 찾기_java

2023. 4. 14. 11:02Algorithm/Programmers

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        int numbersLength = numbers.length;
        int[] answer = new int[numbersLength];
        
        Stack<Numbers> stack = new Stack<>();
        for(int i = 0; i < numbersLength; i++){
            if(stack.isEmpty()){ // 스택이 비어 있는 경우 
                stack.push(new Numbers(numbers[i], i));
            }else{ // 스택에 값이 있는 경우
                while(!stack.isEmpty() && stack.peek().num < numbers[i]){ // 스택의 최상위 값이 현재 수보다 작은 경우
                    Numbers n = stack.pop();
                    answer[n.idx] = numbers[i];
                }
                stack.push(new Numbers(numbers[i], i)); // 현재값 스택에 추가
            }
        }
        
        while(!stack.isEmpty()){ // 남은것 처리
            Numbers n = stack.pop();
            answer[n.idx] = -1;
        }
        
        
        return answer;
    }
    
    public class Numbers{
        int num;
        int idx;
        public Numbers(int num, int idx){
            this.num = num;
            this.idx = idx;
        }
    }
}