Programers : 주식 가격 (stack)
10155 단어 level2PROGRAMERSPROGRAMERS
주식 가격
코드
[ 나의 풀이 ]
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> prices) {
vector<int> answer;
for(int i=0;i<prices.size();i++)
{
int cnt=0;
for(int j=i+1;j<prices.size();j++)
{
if(prices[i] <= prices[j])
cnt++;
else {
cnt ++;
break;
}
}
answer.push_back(cnt);
}
return answer;
}
- 직관적인 풀이법
- 시간복잡도가 아슬아슬해 보인다
- O(N^2) 보다 효율적이게 만드려다가 시간이 많이 소모되었다.
(이럴 때에는 한번 해보는게 더 좋아보인다ㅠㅠ)
[ 최적의 풀이 ]
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> prices) {
vector<int> answer(prices.size());
stack<int> s;
for(int i=0;i<prices.size();i++)
{
while(!s.empty() && prices[s.top()] > prices[i])
{
// 감소가 탐지된 인덱스 ~ 해당 값 까지의 차이만큼은 가격이 떨어지지 않음!
answer[s.top()] = i - s.top();
s.pop();
}
s.push(i);
}
// 감소가 탐지되지 않은 인덱스는 전체 인덱스-1 ~ 해당 인덱스 차이까지
while(!s.empty())
{
answer[s.top()] = (prices.size()-1) - s.top();
s.pop();
}
return answer;
}
- 스택을 사용한 방법이 더 빠른 해결 방법!
- 값이 아닌 인덱스를 활용한 것이 key point!
Author And Source
이 문제에 관하여(Programers : 주식 가격 (stack)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/Programers-주식-가격-stack
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[ 나의 풀이 ]
#include <string> #include <vector> #include <algorithm> using namespace std; vector<int> solution(vector<int> prices) { vector<int> answer; for(int i=0;i<prices.size();i++) { int cnt=0; for(int j=i+1;j<prices.size();j++) { if(prices[i] <= prices[j]) cnt++; else { cnt ++; break; } } answer.push_back(cnt); } return answer; }
- 직관적인 풀이법
- 시간복잡도가 아슬아슬해 보인다
- O(N^2) 보다 효율적이게 만드려다가 시간이 많이 소모되었다.
(이럴 때에는 한번 해보는게 더 좋아보인다ㅠㅠ)
[ 최적의 풀이 ]
#include <string> #include <vector> #include <stack> using namespace std; vector<int> solution(vector<int> prices) { vector<int> answer(prices.size()); stack<int> s; for(int i=0;i<prices.size();i++) { while(!s.empty() && prices[s.top()] > prices[i]) { // 감소가 탐지된 인덱스 ~ 해당 값 까지의 차이만큼은 가격이 떨어지지 않음! answer[s.top()] = i - s.top(); s.pop(); } s.push(i); } // 감소가 탐지되지 않은 인덱스는 전체 인덱스-1 ~ 해당 인덱스 차이까지 while(!s.empty()) { answer[s.top()] = (prices.size()-1) - s.top(); s.pop(); } return answer; }
- 스택을 사용한 방법이 더 빠른 해결 방법!
- 값이 아닌 인덱스를 활용한 것이 key point!
Author And Source
이 문제에 관하여(Programers : 주식 가격 (stack)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@neity16/Programers-주식-가격-stack저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)