hyunjin

[level1] 주식가격 , reverse 함수 사용 , stack 사용 본문

알고리즘 연습/프로그래머스

[level1] 주식가격 , reverse 함수 사용 , stack 사용

_h.j 2020. 6. 29. 20:37
728x90

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

 

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

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

programmers.co.kr

 

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> prices) {
    vector<int> answer;
    int len = prices.size();
    answer.push_back(0);
    for (int i = len - 2; i >=0 ; i--){//거꾸로 가며 판단
        if(prices[i]==1){
            answer.push_back(len-i-1);
            continue;
        }
        int j= i+1;
        while(j<len-1){
            if( prices[j]>=prices[i])
                j++;
            else break;
        }
        answer.push_back(j-i);
    }
    reverse(answer.begin(),answer.end());
    return answer;
}

1. reverse 함수 사용

참고한 사이트 : https://blockdmask.tistory.com/363

양방향 반복자 사용할 수 있는 모든 컨테이너에 적용 가능

헤더 파일 : <algorithm>

 

 

2. 다른 사람의 풀이참고하여 다시 풀어봄 : Stack 사용

인덱스를 활용한 풀이

stack에 인덱스를 넣어두고 pop해서 사용

#include <string>
#include <vector>
#include <stack>

using namespace std;

vector<int> solution(vector<int> prices) {
    vector<int> answer(prices.size());
    stack<int> s;
    int len = prices.size();
    for(int i = 0 ; i< len ; i++){
        
        while(!s.empty() && prices[s.top()] > prices[i]){
            answer[s.top()]=i-s.top();
            s.pop();
        }
        s.push(i);
    }
    while(!s.empty()){
        answer[s.top()]=len-s.top()-1;
        s.pop();
    }
    
    return answer;
}

 

 

 

 

 

728x90