GitHubSeob
C++ / 프로그래머스 / 주식가격 본문
문제 |
https://programmers.co.kr/learn/courses/30/lessons/42584
코딩테스트 연습 - 주식가격
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00
programmers.co.kr
문제풀이 |
스택을 이용하여 풀었다.
stack <pair <int, int>>를 이용하여 first에는 주식가격을, second에는 인덱스 값을 입력한다.
스택에는 현재 탐색하고 있는 주식가격 이하인 가격들만 들어있어야 한다.
따라서 탐색하고 있는 주식가격 보다 큰 가격들이 있으면 반복문을 통해 모두 pop을 한다.
pop을 하면서 인덱스 차이를 answer [기존 주식가격 인덱스]에 값을 입력한다.
while문이 종료되면 현재 주식가격과 인덱스를 스택에 push 한다.
주식가격이 담긴 배열을 다 탐색했는데도 스택에 값이 남아있다면 배열의 사이즈- 1 - 해당 주식 인덱스 값을 answer [해당 주식 인덱스]에 입력한다.
코드 |
#include <string>
#include <vector>
#include <stack>
#define pii pair<int, int>
using namespace std;
vector<int> solution(vector<int> prices) {
vector<int> answer(prices.size());
stack<pii> stk;
stk.push({ prices[0], 0 });
for (int idx = 1; idx < prices.size(); ++idx) {
while (!stk.empty() && stk.top().first > prices[idx]) {
answer[stk.top().second] = idx - stk.top().second;
stk.pop();
}
stk.push({ prices[idx], idx });
}
while (!stk.empty()) {
answer[stk.top().second] = prices.size() - 1 - stk.top().second;
stk.pop();
}
return answer;
}
'Programmers > Level 2' 카테고리의 다른 글
C++ / 프로그래머스 / 오픈채팅방 (0) | 2022.04.13 |
---|---|
C++ / 프로그래머스 / 가장 큰 수 (0) | 2021.11.12 |
C++ / 프로그래머스 / 프린터 (0) | 2021.11.08 |
C++ / 프로그래머스 / 전화번호 목록 (0) | 2021.11.08 |
C++ / 프로그래머스 / 타겟 넘버 (0) | 2021.11.08 |