본문 바로가기

C++/프로그래머스

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

문제 풀이

 

 

#include <string>
#include <vector>
#include <queue>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
	vector<int> answer;
	queue <int> pr, sp;
    
    // queue를 만들어 값을 넣는다.
	for (int i = 0; i < progresses.size(); i++) {
		pr.push(progresses[i]);
		sp.push(speeds[i]);
	}
    
    // 진도의 증가를 day로 표현한다. 곱셈을 사용하기 때문에 초기값은 1.
    int day = 1;
    // 큐가 빌 때까지
	while (!pr.empty()) {
    	//완료된 작업의 개수
		int finished = 0;
		for (int j = 0; j < pr.size(); j++) {
        	// 하단 설명 참조
			if ((pr.front() +( sp.front() * day)) >= 100) {
				finished++;           
				pr.pop();
				sp.pop();
			}
		}
        // 작업이 완료된 것이 있다면 해당 작업들을 answer에 추가
		if (finished != 0)
			answer.push_back(finished);
            
        // 진도 증가
		day++;
	}
	return answer;
}

 

 pr과 sp는 queue이기 때문에 가장 앞의 값이 빠지지 않는다면 다음 값들은 삭제가 불가능하다. 이러한 특성을 이용하여 pr.front()의 값과 sp.front()*day 의 값의 합이 100이 넘게 된다면 finished를 추가하는 방식을 사용한다. 이렇게 한다면 front의 다음 값들이 front보다 먼저 100 이상이 된다고 하더라도 pop이 되지 않기 때문에 front가 완료된다면 이후의 100 이상이 된 값은 for문을 통해 모두 pop이 될 수 있다. 

 

 

 

문제 링크

 

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

 

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

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

programmers.co.kr