Programers : 주식 가격 (stack)

주식 가격

코드

[ 나의 풀이 ]

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution(vector<int> prices) {
    vector<int> answer;
    for(int i=0;i<prices.size();i++)
    {
        int cnt=0;
        for(int j=i+1;j<prices.size();j++)
        {
            if(prices[i] <= prices[j])
                cnt++;
            else {
                cnt ++;
                break;
            }
        }
        answer.push_back(cnt);
    }
    return answer;
}
  • 직관적인 풀이법
  • 시간복잡도가 아슬아슬해 보인다
  • O(N^2) 보다 효율적이게 만드려다가 시간이 많이 소모되었다.
    (이럴 때에는 한번 해보는게 더 좋아보인다ㅠㅠ)

[ 최적의 풀이 ]

#include <string>
#include <vector>
#include <stack>
using namespace std;

vector<int> solution(vector<int> prices) {
    vector<int> answer(prices.size());
    stack<int> s;
    for(int i=0;i<prices.size();i++)
    {
        while(!s.empty() && prices[s.top()] > prices[i])
        {
            // 감소가 탐지된 인덱스 ~ 해당 값 까지의 차이만큼은 가격이 떨어지지 않음!
            answer[s.top()] = i - s.top();
            s.pop();
        }
        s.push(i);
    }
    // 감소가 탐지되지 않은 인덱스는 전체 인덱스-1 ~ 해당 인덱스 차이까지 
    while(!s.empty())
    {
        answer[s.top()] = (prices.size()-1) - s.top();
        s.pop();
    }
    return answer;
}
  • 스택을 사용한 방법이 더 빠른 해결 방법!
  • 값이 아닌 인덱스를 활용한 것이 key point!

좋은 웹페이지 즐겨찾기