---
layout: post
title:  " [Programmers] 42586. 기능 개발 "
categories: Algorithm
tags: Programmers
author: goodGid
---
* content
{:toc}

## Problem 
Problem URL : **[기능 개발](https://programmers.co.kr/learn/courses/30/lessons/42586)**








---

## [1] Answer Code (18. 09. 27)

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

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

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

* 처리 날짜는 고려하지 않았다.
Write PGM Post " 42586. 기능 개발 "
Write PGM Post " 42586. 기능 개발 "
