본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 주식가격

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

 

프로그래머스

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

programmers.co.kr

스택을 이용. 스택에 들어가는 값 int[]에 [0]는 prices의 값을, [1]에는 해당 값의 인덱스를 넣었다.

스택을 peek()한 값이 prices[i] 보다 클 경우 스택에서 값을 제거하고 정답 배열에 현제 인덱스 - 저장된 인덱스를 저장한다.

그리고 for문 이후 모든 값이 스택에 들어가거나 정리가 되면 스택이 비어질때까지 전체 길이 - 저장된 인덱스 - 1(0부터 시작하기 때문에)을 해주었다.

import java.util.Arrays;
import java.util.Stack;
class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        Stack<int[]> st = new Stack<>();

        for (int i = 0; i < prices.length; i++) {
            while (!st.isEmpty() && st.peek()[0] > prices[i]) {
                int[] value = st.pop();
                answer[value[1]] = i - value[1];
            }
            int[] value = new int[2];
            value[0] = prices[i];
            value[1] = i;
            st.push(value);
        }

        while (!st.isEmpty()) {
            int[] value = st.pop();
            answer[value[1]] = prices.length - value[1] - 1;
        }

        return answer;
    }
}