알고리즘 - 기능 개발

2025. 10. 24. 15:53알고리즘

각 기능이 배포되는 시간을 계산한 후 먼저 배포가 가능한 배포일을 기준으로 함께 배포될수 있는것들을 빼는 것

최종적으로 각 배포마다 몇개의 배포가 진행되는지를 출력하는 것.

 

배포시간까지 남은 일수를 저장해둘 큐를 만들어 놓은 후

해당 일자에 배포되는 것들의 개수를 카운트해서 최종적으로 배열에 저장하여 출력하는 출이 방식 사용

 

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        // 배포 시간 담을 큐
        Deque<Integer> deque = new ArrayDeque<>();
        
        // 정답 리스트
        List<Integer> list = new ArrayList<>();
        
        for (int i = 0; i<progresses.length; i++) {
            int leftTime = 100 - progresses[i];
            // 배포 시간 계산
            int leftDay = (int) Math.ceil((double) leftTime/speeds[i]);
            deque.addLast(leftDay);
        }
        
        while(!deque.isEmpty()) {
            int productCount = 1;
            // 배포 날짜
            int today = deque.pollFirst();
            
            while(!deque.isEmpty()) {
                int nextToday = deque.peekFirst();
                if (nextToday <= today) {
                    deque.pollFirst();
                    productCount++;
                } else {
                    break;
                }
            }  
            list.add(productCount);
        }
        
        int[] answer = new int[list.size()];
        
        for (int i = 0; i<list.size(); i++) {
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}