알고리즘/자료구조

[프로그래머스] 주식 가격 (Java, lv2)

leejinwoo1126 2024. 7. 17. 21:05
반응형

 

문제 출처

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

 

프로그래머스

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

programmers.co.kr

 

 

문제 풀이

초 단위로 기록된 주식 가격이 담긴 배열 prices가 주어질때 가격이 떨어지지 않는 기간은 몇초인지 return

- 제한 사항 int[] prices의 길이는 2 이상 100,000 이하 

- O(n^2)으로 풀이시 O(10^10) 발생 가능

- 스택을 사용하여 O(N) 풀이, 인덱스 번호를 스택에 넣는다는 아이디어를 생각하지 못했다.

 

prices : [1, 2, 3, 2, 3]
return : [4, 3, 1, 1, 0]

 

prices[i] < prices[stack.peek()] 인 경우 감소가 발생했으므로

peek idx 값을 꺼내어 answer[idx] = i(현재 위치) - idx 로 갱신해준다

 

 

prices 최대 길이까지 순차 순회 완료하고, stack이 비어있지 않은 경우

하나씩 꺼내서 answer[idx] = 전체 길이 - idx 로 정답을 갱신해준다

 

제출 코드

import java.util.*;

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        
        Deque<Integer> stack = new ArrayDeque<>();
        
        for(int i = 0; i < prices.length; i++) {
            while(!stack.isEmpty() && prices[i] < prices[stack.peek()]) {
                int idx = stack.pop();
                answer[idx] = i - idx;
            }
            
            stack.push(i);
        }
        
        while(!stack.isEmpty()) {
            int idx = stack.pop();
            answer[idx] = prices.length - idx - 1;
        }
        
        
        return answer;
    }
}

 

반응형