프로그래머스 - 주식가격 (Lv.2)

less than 1 minute read

문제 링크

문제 접근

  • prices 는 시간 순서대로 가격이 담겨 있다. 즉, 배열의 인덱스 는 시간이라고 볼 수 있다.
  • 배열을 탐색하면서 가격이 떨어지지 않는다면 스택에 배열의 인덱스(시간)을 담는다.
  • 가격이 떨어진다면, answer[stk.top()] = i - stk.top() 를 담고, 스택의 top() 에 위치한 원소를 버린다.
    • 스택에는 각 배열의 인덱스(시간)가 담겨 있으므로, 해당 위치에 가격이 떨어지지 않은 시간을 계산하여 저장한다.
    • 가격이 떨이지지 않을 때 까지 스택의 top 원소와 비교하며 위 과정을 반복한다.
  • 스택에 남아 있는 원소는 끝까지 가격이 떨어지지 않았던 가격들로, 마찬가지로 배열의 최종 길이(n-1)에서 시간을 계산하여 저장한다.

구현(All Pass)

#include <string>
#include <vector>
#include <stack>

using namespace std;

vector<int> solution(vector<int> prices) {
    int n = prices.size();
    vector<int> answer(n,-1);
    stack<int> stk;
    stk.push(0);
    for(int i=1; i<n; i++){
        while(!stk.empty()){
            if(prices[stk.top()] > prices[i]){
                answer[stk.top()] = i - stk.top();
                stk.pop();
            }
            else
                break;
        }
        stk.push(i);
    }
    
    while(!stk.empty()){
        answer[stk.top()] = n-1-stk.top();
        stk.pop();
    }
    
    return answer;
}

Leave a comment