큐를 사용해서 구현한 문제이다.
현재 progresses와 speeds를 사용해, 총 걸리는 시간을 계산하여 큐에 넣는다. 만약 progresses[i]/speeds[i]가 딱 나누어 떨어진다면, 그 날을 바로 큐에 넣고, 아니라면 1을 더해서 넣는다.
큐의 fifo 개념을 사용하여, 먼저들어온, 값들을 먼저 내보내는 것을 1차 기준으로 하고, 뒤에 값이 현재 자기보다 작은 거라면, 계속 뽑고, 자기보다 큰 것이 나온다면, 뽑는 것을 멈추고 다시 while문을 돌아가서 시작하면 된다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
int taskSize = progresses.size();
queue<int> q;
vector<int> answer;
for(int i = 0 ; i < taskSize ; i++){
int days = (100-progresses[i])/speeds[i];
if((100-progresses[i])%speeds[i] != 0){
days += 1;
}
q.push(days);
}
while(1){
if(q.empty()) break;
int cnt = 0;
int firstNum = q.front();
int tempNum;
q.pop();
cnt++;
while(1){
if(q.empty()) break;
tempNum = q.front();
if(tempNum > firstNum) break;
q.pop();
cnt++;
}
answer.push_back(cnt);
}
return answer;
}