스택/큐 - 주식가격
Updated:
C++
스택/큐 - 주식가격
문제
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
접근 방법
두 가지 방법으로 문제를 해결하였다.
처음에 stack을 사용하지 않고, 이중 for문을 이용하여 쉽게 해결하였다.
주식 가격이 마지막이 아니라면 최소한 1초는 가격이 떨어지지 않는다.
이후 나중의 주식가격을 비교해가며 몇 초동안 떨어지지 않는지 확인 한 후 결과 벡터에 저장하여 출력한다.
코드
#include <iostream>
#include <vector>
using namespace std;
vector<int> solution(vector<int> prices) {
vector<int> answer;
int time = 0; //주식 가격이 떨어지지 않으며 버틴 시간
for (int i = 0; i < prices.size(); i++) {
for (int j = i + 1; j < prices.size(); j++) {
time++; //1초간 가격은 떨어지지 않으므로, 비교하기 전에 증가한다.
if (prices.at(i) > prices.at(j)) { //만약 주식 가격이 현재 가격보다 떨어지는 순간이 오면 time를 증가시키는 것을 멈춘다.
break;
}
}
answer.push_back(time); //결과를 저장한다.
time = 0;
}
return answer;
}
후기 및 개선할 점
2중 for문으로는 10분만에 해결이 가능하다.
하지만 문제 의도는 stack을 사용하여 풀어라 하였으므로, stack을 사용하여 푸는 방법을 고심하였다.
접근 방법 - stack
제일 중요한 것은 스택에 시간을 넣으며, 주식가격을 비교하고 가격이 떨어졌다면 스택의 시간과 현재 시간의 차이를 비교하는 것이다!!
출처
코드 - stack
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> prices) {
int n = prices.size();
vector<int> answer(n);
stack<int> time;
int price = 0;
for (int i = 0; i < n; i++) {
while (!time.empty() && prices.at(time.top() > prices.at(i))) {
int top = time.top();
time.pop();
answer.at(top) = i - top;
}
time.push(i);
}
while (!time.empty()) {
int top = time.top();
time.pop();
answer[top] = n - top - 1;
}
return answer;
}