문제 설명
기능개발
해결 방법
각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포된다. 어떤 기능이 먼저 완성되었더라도 앞에 있는 모든 기능이 완성되지 않으면 배포가 불가능하다.
선입선출 구조인 queue를 사용한다.
총 진행한 작업의 개수를 확인하기 위해check
변수를 선언한다.
큐에 기능의 진행도를 순서대로 삽입하고 큐의 front 가 100에 도달하면 pop 한다.
이 때 pop 한 개수를 세서cnt
한 번에 배포한 작업의 개수를 answer에 push_back 한다.
front 가 100이 넘지 않았다면 큐를 비우고 모든 기능에 speeds를 더해 큐에 재 push 한다.
이 과정을 모든 기능이 100에 도달해서 pop 될 때 까지 반복한다.
💻소스코드
#include <string>
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
queue<int> q;
int check = 0; // 총 진행한 작업의 개수
while (check < progresses.size()) {
int cnt = 0; // 한 번에 배포한 작업의 개수
for (int i = check; i < progresses.size(); i++) // 선입선출, 큐에 순서대로 삽입
q.push(progresses[i]);
if (q.front() >= 100) {
while (q.front() >= 100 && !q.empty()) {
q.pop();
cnt++;
}
answer.push_back(cnt);
check += cnt;
}
else {
while (!q.empty())
q.pop();
for (int j = 0; j < progresses.size(); j++)
progresses[j] += speeds[j];
}
}
return answer;
}