본문 바로가기

Algorithm/자료구조

(C++) - 프로그래머스(고득점 kit - 스택) : 기능개발

반응형

programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

stack에 분류되어있지만 그렇게 풀지 않았습니다.

 

풀이방법

 1. 앞 기능을 pivot으로 잡고 이보다 큰 남은 일 수가 있다면 pivot을 해당 인덱스로 옮겨줍니다. 그리고 셌던 기능 개수를 answer에 push 해줍니다.

 2. 작거나 같다면 같은날에 배포되므로 cnt를 1씩 증가시켜줍니다.

 

Code

#include <bits/stdc++.h>
using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    vector <int> releaseDay;
    for(int i = 0; i < progresses.size(); i++){
        int rDay = (100 - progresses[i]) / speeds[i];
        if((100 - progresses[i]) % speeds[i] == 0){
            releaseDay.push_back(rDay);
        }else{
            releaseDay.push_back(rDay + 1);
        }
    }
    int funcCnt = 1;
    int pivot = 0;
    for(int i = 1; i < releaseDay.size(); i++){
        if(releaseDay[pivot] >= releaseDay[i]){
            funcCnt++;
        }else{
            pivot = i;
            answer.push_back(funcCnt);
            funcCnt = 1;
        }
        if( i== releaseDay.size() - 1) answer.push_back(funcCnt);
    }
    return answer;
}