Problem
Problem URL : 기능 개발
[1] Answer Code (18. 09. 27)
#include <string>
#include <vector>
#include <iostream>
#include <queue>
#define p pair<int,int>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
int size = (int) progresses.size();
queue<p> q;
for(int i=0; i<size; i++){
q.push( {progresses[i],i} );
}
int cnt = 0;
int date;
while(! q.empty()){
if( cnt == 0) {
int prog = 100 - q.front().first;
int idx = q.front().second;
q.pop();
cnt ++;
if( prog % speeds[idx] == 0){
date = prog / speeds[idx];
}
else{
date = prog / speeds[idx] + 1;
}
} // end of if
else {
int top = q.front().first;
int idx = q.front().second;
int remain_work = 100 - top;
if(date * speeds[idx] >= remain_work){
cnt ++;
q.pop();
continue;
}
else{
answer.push_back(cnt);
cnt = 0;
}
} // end of else
} // end of while loop
answer.push_back(cnt);
return answer;
}
Review
-
앞에 있는 작업부터 처리를 해야하는 일괄 처리방식이기 때문에 queue가 바라보는 front()를 기준으로 잡는다.
-
그리고 front가 끝내려면 며칠이 걸리는 계산을 한 후
-
그 뒤에 작업에 대해 front가 걸리는 날안에 배포가 가능한지 체크한다.
-
안된다면 안되는 작업부터 다시 반복 !
-
어차피 해당일이 며칠 걸리는지를 물어보는게 아니라 배포하는날 몇개가 동시에 되느냐를 묻기 때문에
-
처리 날짜는 고려하지 않았다.