어흥

[프로그래머스] 주식가격 (C++) 본문

알고리즘/프로그래머스

[프로그래머스] 주식가격 (C++)

라이언납시오 2022. 1. 5. 18:32
728x90
반응형

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42584?language=cpp 

 

코딩테스트 연습 - 주식가격

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00

programmers.co.kr

1. 주의할 점

- Stack을 이용하여 해결한다

 

2. 구현

- Stack에 Prices의 인덱스를 담는 방식으로 진행한다

- Stack의 Top의 원소에 해당하는 Prices보다 현재 Prices(val)가 크거나 같으면 Stack에 추가한다

- 아니라면 Stack의 원소를 뽑아내여 Arr[] 배열에 주식이 내려가지 않은 기간을 저장한다

- For문이 끝나더라도 Stack에 원소가 남아있을 수 있으니, Stack의 전체가 빌때까지 모든 원소를 뽑아내어 Arr[] 배열을 채운다

#include <string>
#include <vector>
#include <stack>
using namespace std;
int arr[100000];

vector<int> solution(vector<int> prices) {
    vector<int> answer;
    int len = prices.size()-1;
    stack<int> s;
    
    for(int i=0;i<=len;i++){
        int val = prices[i];
        while(!s.empty()){
            int cidx = s.top();
            int cv = prices[cidx];
            if(cv<=val)   break;
            else{
                arr[cidx] = i-cidx;
                s.pop();
            }
        }
        s.push(i);
    }
    while(!s.empty()){
        int cidx = s.top();
        s.pop();
        arr[cidx]=len-cidx;
    }
    for(int i=0;i<=len;i++)
        answer.push_back(arr[i]);
    return answer;
}
728x90
반응형
Comments