STUDY/코딩테스트 연습(PS)

프로그래머스/주식가격(스택,큐)/C++

hyunah 2021. 4. 2. 11:43

문제 설명

스택, 큐 문제지만 이번에도 스택과 큐 없이 풀었다.. 프로그래머스의 문제 분류는 보면 항상 '그 자료구조를 꼭 써야지 풀리는 문제'라기보다는 '그 자료구조를 써서 풀 수도 있기는 한 문제'인 듯하다.

 

 

 

 

 

주의할 점

: '질문하기'를 보면 알 수 있지만, 효율성에 연연하지 않고 정확한 답을 푸는 것에 집중하면 어떻게든 풀린다. 추가할만한 테스트 케이스는 prices가 [1,2,3,2,3,1]인 경우, return값은 [5, 4, 1, 2, 1, 0]이 나와야 한다.

 

 

 

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int find_smaller(int i, vector<int> &prices){
    int index = 0;
    for(int k = 1; k < (prices.size()-i); k++){
        if(prices[i] > prices[i+k]) return ++index;
        else ++index;
    }
    return index;
}

vector<int> solution(vector<int> prices) {
    vector<int> answer;

    for(int i = 0; i < prices.size(); i++){
        int index = find_smaller(i,prices);
        answer.push_back(index);
    }
    return answer;
}

 

 

 

 

디버깅 기록

: 처음에는 최소값을 구하여 그 값과의 거리와 비교를 하였는데, 위에서 언급한 테스트 케이스에서는 오류가 나왔다. index가 2인 3의 경우 바로 다음에 2가 나와서 1초만에 감소하는데, 나는 최소값과 비교했기 대문에 4초가 나왔던 것이다. 더 작은 값을 구하는 find_smaller를 작성해 이 부분을 보완하였다. 문제를 제대로 파악하자^^!!

find_smaller에서 편의를 위해 더 작은 값과의 인덱스 차이를 반환하였는데, 이 부분은 다른 사람이 내 코드를 읽는다고 생각해본다면 수정해야할 부분인 듯 하다. 메소드 이름을 바꾸든지 반환하는 인덱스를 더 작은 값의 전체 배열에서의 인덱스로 바꾸는 게 좋겠다. 함수의 이름과 역할을 명확히하자. 누가봐도 뭐하는 함수인지 알 수 있도록!

모든 경우에 대해 리턴값을 반드시 전해주도록 신경쓰자. 기본 중에 기본인데 이 부분에서 실수를 해서 잠시 헤맸다.