본문 바로가기

코딩테스트/programmers

주식가격

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

 

프로그래머스

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

programmers.co.kr

 

너무 쉬운 스택 문제였는데....... 처음부터 길을 잘못드는 바람에 소스가 산으로 갔다 왔다.

 

주식 가격이 계속 오르고 있을 땐 스택에 쌓아주고,

 

주식 가격이 이전 가격보다 떨어지는 순간

 

스택에서 현재 가격보다 높은 가격인 순간을 모두 꺼내어 시간값을 계산해준다.

 

비록 스택이 자동으로 오름차순 정렬해주진 않지만 위 로직에 의하면 오름차순 정렬한 것과 다를바 없어지므로 정렬엔 신경 쓸 필요가 없다.

 

import java.util.*;

class Solution {
    
    public int[] solution(int[] prices) {
       
        Stack<Stock> stack = new Stack();
        
        int[] answer = new int[prices.length];
        
        for (int i = 0; i < prices.length; i++) {
            
            Stock next = Stock.of(i, prices[i]);
            
            while (!stack.isEmpty()) {
                
                Stock prev = stack.peek();
                if (prev.price <= next.price) {
                    break;
                }
                
                prev = stack.pop();
                answer[prev.time] = i - prev.time;
                
            }
            
            stack.push(next);
            
        }
        
        while (!stack.isEmpty()) {
            Stock stock = stack.pop();
            answer[stock.time] = prices.length - stock.time - 1;
        }
        
        return answer;
    }
    
    static class Stock {
        int time;
        int price;
        static Stock of(int time, int price) {
            Stock vo = new Stock();
            vo.time = time;
            vo.price = price;
            return vo;
        }
    }
    
}

'코딩테스트 > programmers' 카테고리의 다른 글

파일명 정렬  (0) 2023.10.31
스킬트리  (0) 2023.10.28
방문 길이  (0) 2023.10.25
땅따먹기  (0) 2023.10.25
주차 요금 계산  (0) 2023.10.25