Development Logs/Algorithms

[JAVA] 프로그래머스 : 기능개발 (코딩테스트 고득점 kit > 스택/큐)

유뱅유뱅뱅 2020. 7. 14. 20:56

https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 ��

programmers.co.kr

큐를 사용하여 구현함

해당 기능 완료하는데 걸리는 날을 미리 계산하여 Queue에 저장함

import java.util.*;
// 기능개발
// 큐 사용(병렬 스케줄링)
// 각각의 기능 개발
// 순서대로 배포 되야함
class Solution {
    
    public int[] solution(int[] progresses, int[] speeds) {
        
        ArrayList<Integer> results = new ArrayList<>();
        
        // 해당 기능 완료하는데 걸리는 날 Queue
        Queue<Integer> q = new LinkedList<>();
        int day = 0;
        for(int i=0; i<progresses.length; i++){
            if((100 - progresses[i]) % speeds[i] == 0 ){
                day = (100 - progresses[i]) / speeds[i];
            }
            else{
                day = (100 - progresses[i]) / speeds[i];
                day += 1;
            }
            q.offer(day);
        }
        
        // 7 3 9
        int cnt;
        while(!q.isEmpty()){
            // 기능 배포 수
            cnt = 0;
            // 첫 번째 기능 걸리는 날보다 작은 날 까지 배포 가능하므로 cnt++
            for(int i=0; i<q.size(); i++){
                if(q.peek() >= (int)q.toArray()[i]){
                    cnt++;
                }else{
                    break;
                }
            }
            
            // 가능한 기능 전부 배포 했으므로 poll
            for(int i=0; i<cnt; i++){
                q.poll();
            }
            
            // 몇 개의 기능 배포했는지 저장
            results.add(cnt);
        }
        
        // ArrayList -> array 변환
        int[] answer = new int[results.size()];
        int idx = 0;
        for(int result : results){
            answer[idx++] = result;
        }
        
        return answer;
    }
}