프로그래머스 - 기능개발(스택 / 큐) / Level 2 / Java

Young Hun Park·2023년 4월 26일
0
post-custom-banner

문제 📋

프로그래머스 - 기능개발


풀이 📝

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        List<Integer> answer = new ArrayList<>();
        Queue<Integer> deployDays = new ArrayDeque<>();
        
        for (int i = 0; i < progresses.length; i++) {
            int day = (int)Math.ceil((100 - progresses[i]) / (double)speeds[i]); //소요 일수 계산.
                
            if (deployDays.isEmpty()) {
                deployDays.add(day);
                continue;
            }
            
            if (deployDays.element() >= day) {
                deployDays.add(day);
            }
            else {
                answer.add(deployDays.size());
                deployDays.clear();
                deployDays.add(day);
            }
        }
        
        if (!deployDays.isEmpty()) {
            answer.add(deployDays.size());
        }
        
        return answer.stream()
            .mapToInt(Integer::intValue)
            .toArray();
    }
}


  1. 문제 정의
    작업 진행도와 작업 속도가 주어졌을 때 언제 완료될지 계산해서
    하나의 배포 시기에 몇 개의 기능들이 배포되는지 구하는 문제이다.

주의할 점은 작업들 간의 순서가 존재하여 앞 작업이 완료되지 않아 배포되지 않으면
뒤 작업들은 대기했다가 앞 작업이 배포될 때 같이 배포되어야 한다.

  1. 시간 복잡도 계산
    작업의 개수는 최대 100개로 O(N)으로 풀었기 때문에 특별히 고려할 사항 없었다.

  2. 문제 풀이
    먼저 작업 별로 언제 완료되는지 계산해서 deployDays 큐에 넣어주었다.
    넣어줄 때 현재 큐에 맨 앞에 있는 작업보다 완료될 날짜가 앞이라면 그냥 넣어주고
    만약 완료될 날짜가 뒤라면 전부 배포 처리하고 넣어주었다.

  3. 예외 사항
    기타 특이사항 없음.

profile
개발자에게 유용한 지식
post-custom-banner

0개의 댓글