본문 바로가기
알고리즘/프로그래머스

알고리즘(C++) / 프로그래머스 level 2 : 기능 개발

by clean_h 2021. 7. 25.
728x90

level 2 : 기능 개발

https://programmers.co.kr/learn/courses/30/lessons/42586?language=cpp 

 

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

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

programmers.co.kr

 

코드

//프로그래머스 기능 개발
#include <iostream>
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;

    vector<int> day;
    for (int i = 0; i < progresses.size(); i++) {
        int time = 0;
        day.push_back((100 - progresses[i]) / speeds[i]); // 작업 걸리는 날
        if ((100 - progresses[i]) % speeds[i]) //나머지가 있으면 +1
            ++day.back(); //가장 뒤 벡터 +1
    }

    int service = day[0];
    int num = 1;
    for (int i = 1; i < day.size(); i++ ) {
        if (service >= day[i])
            num++;
        else {
            answer.push_back(num);
            service = day[i];
            num = 1;
        }
    }
    answer.push_back(num);

    return answer;
}

int main() {
    vector<int> progresses = { 95, 90, 99, 99, 80, 99 };
    vector<int> speeds = { 1,1,1,1,1,1 };

    solution(progresses, speeds);

    return 0;
}

 

설명

작업 걸리는 날이 며칠인지 구하여 벡터 day에 저장하였다. 

작업이 며칠에 끝나는지는 (100 - (완료된 작업%)) / (하루에 작업 가능한 %)이다. 다음 식에서 나머지가 존재한다면 +1 해준다. 

여기서 (100 - (완료된 작업%)) / (하루에 작업 가능한 %) 하지 않고 (99 - (완료된 작업%)) / (하루에 작업 가능한 %) +1로 한다면 나머지를 생각하지 않고 작업 일 수 구하는 것이 가능하다. 

 

벡터 day에서 다음 작업이 전 작업일수보다 작다면 같이 배포가 가능하다. 따라서 num을 증가시켜주고 그렇지 않다면 이후에 배포한다.

 

고찰

++day.back(); // 가장 뒤 벡터 +1
++day.front(); // 가장 앞 벡터 +1

벡터의 다음 함수 back을 사용하여 가장 뒤 벡터의 값을 +1할 수 있고 front함수를 사용하여 가장 앞 벡터 값을 +1 할 수 있다.

 

728x90

댓글