프로그래머스(Programmers)
주식가격
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를 명시적으로 선언해주면 됩니다.
반응형