[ 나의 풀이 ]
#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);
}
while(!s.empty())
{
answer[s.top()] = (prices.size()-1) - s.top();
s.pop();
}
return answer;
}
- 스택을 사용한 방법이 더 빠른 해결 방법!
- 값이 아닌 인덱스를 활용한 것이 key point!