알고리즘 풀이/프로그래머스

[고득점 KIT] 주식가격

mhko411 2021. 2. 9. 23:33
728x90

문제
초 단위로 기록된 주식가격이 담긴 배열이 입력될 때 가격이 떨어지지 않은 기간은 몇 초인지 return하는 함수를 완성하세요

입력
주식가격이 담긴 배열이 입력된다.

출력
각각의 주식가격이 떨어지지않는 기간은 몇 초인지 배열형태로 출력한다.


접근

기준이 되는 가격보다 크거나 같다면 1을 증가시키고 작다면 1을 증가시키고 중단시킨다. 

 

풀이

1. prices의 처음부터 탐색을 진행하며 각 탐색마다 count를 0으로 초기화시킨다.

2. 기준이되는 인덱스 i의 값보다 크거나 같다면 count를 증가시킨다.

2. 하지만 인덱스 i보다 작다면 count를 증가시키고 break한다.

3. 지금까지 증가시킨 count를 answer에 추가한다.

4. 마지막은 count가 0이 되므로 바로 answer에 0이 추가된다.

#include <string>
#include <vector>
#include<stack>

using namespace std;

vector<int> solution(vector<int> prices) {
    vector<int> answer;
    
    for(int i=0;i<prices.size();i++){
        int count = 0;
        for(int j=i+1;j<prices.size();j++){
            if(prices[i]<=prices[j])
                count+=1;
            else{
                count+=1;
                break;
            }    
        }
        answer.push_back(count);
    }
    return answer;
}

 

아래의 코드는 다른 사람의 코드인데 나의 코드보다 더 직관적으로 보기편했다.

아래의 코드에서는 두 번째 for문에서 계속 시간을 증가시키다가 기준 가격보다 작았을 때 answer에 추가하고 break를 한다. 

입력예시로 들어오는 [1, 2, 3, 2, 3]에서 3번째의 3다음에 2로 넘어갈 때를 처리하는 것이 복잡하게 구현되었는데 아래의 코드는 이 부분에서 더 쉽게 이해할 수 있는 코드였다.

#include <string>
#include <vector>
using namespace std;

vector<int> solution(vector<int> prices) {
    vector<int> answer;
    int size=prices.size();

    for(int i=0; i<size; i++){
        int time=0;
        for(int j=i+1; j<size; j++){
            time++;
            if(prices[j]<prices[i]||j==size-1){ //마지막에서 두번째 값은 만약 마지막 값이 더 크다면 push할 수가 없기때문에 조건에 추가
                answer.push_back(time);
                break;
            }
        }
    }

    answer.push_back(0); //마지막은 시간이 없음

    return answer;
}