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

YH·2024년 1월 7일
0

문제

기능개발 : 문제 링크


문제 분석

  • 프로그래머스 팀에서는 기능 개선 작업을 수행 중이다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포된다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성

  • 제한 사항

  • 작업의 개수(progresses, speeds배열의 길이)는 100개 이하이다.
  • 작업 진도는 100 미만의 자연수입니다.
  • 작업 속도는 100 이하의 자연수입니다.
  • 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정한다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어진다.
  • 남은 작업일을 저장할 정수형 벡터 left, 각 배포마다 기능이 배포되는 개수를 저장할 정수형 벡터 answer을 초기화. for loop를 사용하여 progresses의 첫번째부터 마지막 원소까지 순회하고, 정수형 변수 more에 100에서 현재 인덱스의 원소를 빼고 개발속도로 나눈 몫을, 정수형 변수 rest에 나머지를 저장. rest가 0이 아니라면 하루더 필요함을 의미하므로 if문을 사용하여 more을 1씩 늘리고, more을 left에 저장. loop 탈출 후, 정수형 변수 max_num에 left의 0번째 인덱스의 원소를 저장하고, 배포될 기능의 수를 저장할 정수형 변수 count를 1로 초기화.
  • 또 다른 for loop를 사용하여 left의 1번째부터 마지막 원소까지 순회하고 if문을 사용하여 현재 인덱스의 원소가 max_num 미만이라면 count를 1씩늘림. 아닐 경우 else문을 사용하여 answer에 count 값을 저장하고, max_num에 현재 인덱스의 원소를 저장 후, count를 1로 초기화하는 과정을 반복. loop 탈출 후, 마지막에 저장된 count를 answer에 저장하고 answer을 return

풀이

#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> left, answer;
    
    for(int i = 0; i < progresses.size(); ++i) {
        int more = (100 - progresses[i]) / speeds[i];
        int rest = (100 - progresses[i]) % speeds[i];
        if(rest > 0) more++;
        left.push_back(more);
    }
    int max_num = left[0], count = 1;
    for(int i = 1; i < left.size(); ++i) {
        if(max_num >= left[i]) count++;
        else {
            answer.push_back(count);
            max_num = left[i];
            count = 1;
        }
    }
    answer.push_back(count);
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글