728x90
반응형
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
prices [1, 2, 3, 2, 3] | return [4, 3, 1, 1, 0] |
- 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
- 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
- 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
- 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
- 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.
내 풀이
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> prices) {
vector<int> answer;
int cnt;
for(auto it=prices.begin(); it!=prices.end(); it++) // 순차적으로 하나씩 접근
{ // 여기서 현재 잡고 있는 it가 비교의 기준임.
cnt = 0;
for(auto eit=(it+1); eit!=prices.end(); eit++) // 바깥 반복에서 접근한 요소 다음 요소들을 모두 확인한다
{
cnt++;
if((*eit)-(*it) < 0) // 비교의 기준 it 보다 작아지는지 확인
{ // 작아지면
answer.push_back(cnt); // 그 때의 카운트를 넣는다
cnt = -1; // 카운트가 등록되었으니 의미 없음 이제.
break;
}
}
if(cnt != -1) // 끝까지 작아지지 않았다면
answer.push_back(cnt); // 총 카운트를 넣는다.
} // 그리고 다음 요소를 기준으로 변경한다
return answer;
}
인기 풀이
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> prices) {
vector<int> answer(prices.size());
stack<int> s;
int size = prices.size();
for(int i=0;i<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()] = size-s.top()-1;
s.pop();
}
return answer;
}
728x90
반응형
'프로그래밍응용 > 오답노트' 카테고리의 다른 글
SQL1 (0) | 2021.02.15 |
---|---|
무식하게 완전 탐색! - 모의고사 (0) | 2021.02.15 |
벡터 복사 및 sort 이용 (0) | 2021.02.13 |
우선순위 큐 이용한 문제 ㅋㅋ (0) | 2021.02.13 |
A집단과 B집단의 차이를 구할 때 (0) | 2021.02.12 |