프로그래머스 기능개발 (Java,자바)

jonghyukLee·2022년 6월 1일
0

이번에 풀어본 문제는
프로그래머스 기능개발 입니다.

📕 문제 링크

❗️코드

import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer;
        List<Integer> answerAl = new ArrayList<>();
        int pSize = progresses.length;
        Queue<Integer> q = new LinkedList<>();
        for (int i = 0; i < pSize; i++) {
            int speed = speeds[i];
            int diff = 100 - progresses[i]; // 남은 작업량

            int day = (diff / speed);
            // 나누어 떨어지지 않으면 +1
            if ((diff % speed) != 0) day++;

            q.add(day);
        }
        
        while(!q.isEmpty()) {
            int maxValue = q.poll();
            int cnt = 1;
             while (!q.isEmpty()) {
                 if(q.peek() <= maxValue) {
                     cnt++;
                     q.poll();
                 }
                 else break;
             }
             answerAl.add(cnt);
        }
        int alSize = answerAl.size();
        answer = new int[alSize];
        for (int i = 0; i < alSize; i++) answer[i] = answerAl.get(i);

        return answer;
    }
}

📝 풀이

우선순위가 높은 작업이 완료되었을 때, 후순위의 작업들도 완료되었다면 모아서 한번에 배포시키는 문제입니다.
각 작업들이 완료되기까지 필요한 날짜를 모두 구해놓고, 현재 우선순위가 가장 높은 작업보다 완료날짜가 큰 값이 나올때까지 카운트를 더해주면 해결할 수 있습니다.

📜 후기

요즘 시간분배를 못하고 있어서 알고리즘 문제풀이에 조금 소홀한거같은데, 좀 더 노력해서 꾸준히 풀어볼 생각입니다!

profile
머무르지 않기!

0개의 댓글