Gidhub BE Developer

[Programmers] 기능 개발

2018-09-27
goodGid

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가 걸리는 날안에 배포가 가능한지 체크한다.

  • 안된다면 안되는 작업부터 다시 반복 !

  • 어차피 해당일이 며칠 걸리는지를 물어보는게 아니라 배포하는날 몇개가 동시에 되느냐를 묻기 때문에

  • 처리 날짜는 고려하지 않았다.


Recommend

Index