경험의 기록

문제

 

코딩테스트 연습 - 주식가격

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00

programmers.co.kr

 

풀이

0. 문제 해석

prices 배열의 크기 만큼 반복하면서

스택에 인덱스값을 저장하여 그 인덱스를 활용해 prices를 비교하면 쉽게 풀 수 있다.

 

문제를 처음에 잘 이해하지 못했는데,

가격이 처음 떨어지면 그 떨어진 시점 한번만 구하면 되고, 이제 그 주식에 대해 계산하지 않아도 된다.

1. 전체 코드

// [프로그래머스] 주식가격 (Java)
import java.util.*;

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = {};
        
        Stack<Integer> stack = new Stack<Integer>();
        int[] arr = new int[prices.length]; // 정답 배열
        
        for(int i = 0; i < prices.length; i++){
            while(!stack.isEmpty()){
                int peek = prices[stack.peek()];
                
                // 새로 들어오는 값이 더 작은 경우 pop, 그 index 차이 만큼을 정답 배열에
                if(peek > prices[i]){
                    int pop = stack.pop();
                    arr[pop] = i - pop;
                }
                else{
                    break;
                }
            }
            // index 값 저장
            stack.add(i);
        }
        
        // 끝까지 가격이 떨어지지 않은 주식
        while(!stack.isEmpty()){
            int pop = stack.pop();
            arr[pop] = prices.length - pop - 1;
        }
        
        answer = arr;
        return answer;
    }
}

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading