알고리즘 연습/프로그래머스
[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