[プログラマ]機能の開発


📌 質問する


プログラマチームは機能強化を実行しています.各機能は、進捗が100%の場合にサービスに反映されます.
また、各機能の開発速度が異なるため、後の機能は前の機能の開発より先に、後の機能は前の機能の導入時に一緒に導入される可能性があります.
まず、ソリューション関数を完了し、特定の整数配列の進捗状況(必要に応じて配置される順序)と整数配列速度(タスクごとの開発速度)のときに、各配置にどれだけの機能があるかを返します.
[制限]
○ジョブの個数(進捗、速度配列の長さ)は100個以下とする.
仕事の進度は100未満の自然数である.
仕事のスピードは100以下の自然数です.
/デプロイメントは1日に1回しか実行できません.1日の終了時に完了すると仮定します.たとえば、開発の進捗状況が95%のタスクの速度が1日4%の場合、導入は2日後に完了します.
>>質問の詳細-プログラマー

💡 プール(Java)

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
    	//First In First Out의 형태이므로 Queue를 사용
    	Queue<Integer> q = new LinkedList<>();
    	
    	//작업별 작업일을 계산하여 큐에 넣어줌
        for (int i = 0; i < progresses.length; i++) {
            int finished = (int) Math.ceil((double)(100-progresses[i]) / speeds[i]);
            q.add(finished);
        }

        ArrayList<Integer> list = new ArrayList<>();
        
        //큐를 하나씩 꺼내면서 첫번째 값이 그전의 첫번째값보다 작으면 배포 개수 ++
        while(!q.isEmpty()) {
            int releaseCnt = 1;
            Integer job = q.poll();
            while(!q.isEmpty() && q.peek() <= job) {
                q.poll();
                releaseCnt++;
            }
            list.add(releaseCnt);
        }
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}
Qを使わなくても問題は解決できるが、Qを学ぶと同時に使い方も身につけた.次はQの基本的な方法です!
q.add();//列の中の
q.peek(); //最初のキューの検索
q.poll();//キューの最初のポップアップ(削除)
q.size();//キュー内の要素数
q.isEmpty();//キューが空の場合はtrue、空でない場合はfalse