cosmohoo 2021. 12. 3. 01:17
반응형

문제설명

 

입출력 예 설명

 

 

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

vector<int> solution(vector<int> prices) {

    
    int size=prices.size();
    stack<int> can; //stack에는 해당prices의 값이 들어가는 시간이 쌓인다.
    vector<int> arr(size); //몇초 지났는지 넣을 vector
    
    for(int i=0; i<prices.size(); i++)
    {
        while(!can.empty() && prices[can.top()] > prices[i]) // stack이 비어있지 않고 && 스택 맨위의 인덱스에 해당하는 prices의 가격 이 곧 들어올 prices보다 큰 경우 = 가격이 하락한 경우
        {
            arr[can.top()] = i-can.top();
            can.pop();
        }
        can.push(i);// 하락한 경우가 아닐 경우, stack에 prices의 INDEX값 삽입
    }
    
    while(!can.empty())
    {
        arr[can.top()] =size - can.top() -1;
        can.pop();
    }
    return arr;
}

int main()
{
    vector<int> arr ={1,2,3,2,3};
    solution(arr);
    
    return 0;
    
}

 

=> stack을 사용하여야 시간 복잡도에 걸리지 않는 문제입니다. 

=> 문제풀이는 주석을 보면 알 수 있습니다. 

=> 저는 arr의 사이즈를 정해주지 않고 계속 대입하는 오류를 범하여 'core dumped' Error가 떴었습니다. 

=> 해당 Error를 없애기 위해서는 미리 가장 최댓값인 10,000 크기의 vector를 생성하던지, prices.size() 크기만큼의 vector를 명시적으로 선언해주면 됩니다. 

 

 

반응형