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

+ Recent posts