본문 바로가기
Programming Solve/프로그래머스

프로그래머스 - 기능 개발 / C++

by msm1029 2021. 5. 23.
반응형

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42586

 

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

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

programmers.co.kr

<코드>

#include <bits/stdc++.h>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    vector<int> takes;//며칠이 걸리는지
    
    for(int i=0;i<progresses.size(); i++){
        takes.push_back(ceil((100-progresses[i])/float(speeds[i])));
    }
    
    int cnt = 0;
    int tmp = takes[0];
    for(int i=0;i<takes.size(); i++){
        
        if(tmp >= takes[i]){
            cnt++;
        }
        else{
            answer.push_back(cnt);
            cnt = 1;
            tmp = takes[i];
        }
    }
    answer.push_back(cnt);
    
    return answer;
}

<풀이>

70을 30으로 나누는 경우를 생각해보자. 

만약 둘 다 int형이라면 그냥 2가 나온다. 따라서 한 변수를 float으로 형변환 해준 뒤 올림해준다.

tmp 변수에 첫 번째 작업이 걸리는 일 수를 저장해두고 i번째 작업과 비교한다.
만약 첫 번째 작업이 끝날 때 i번째 작업도 끝나면 cnt++를 해주고, 아니라면 쌓인 cnt값을 answer에 push한 뒤
cnt를 다시 1로 설정한다. 

처음 시작할 때에는 tmp를 takes[0]으로 초기화 하고 0번째 인덱스부터 비교하므로 cnt=0이었지만 지금은 1로 설정해야 한다.
이제 다시 tmp 변수에 i번째 작업이 며칠 걸리는지 넣어두고 진행한다.
비교가 끝나면 마지막으로 cnt를 push해준다.

반응형