[프로그래머스/queue/level2] 기능 개발

[프로그래머스]기능 개발


1. 문제 설명

  1. 일별로 추가하면서 가장 앞에 있는 작업 완료 여부를 확인한다.
    • 앞의 작업을 완료할 경우, 완료한 작업은 큐에서 제거하고다음 작업의 완료 여부를 확인한다.
    • 앞의 작업을 완료되지 않았을 경우, 일자(day)를 증가시킨다.

  1. 만약 작업을 완료한 기능이 존재한다면 결과 리스트(answrList)에 추가한다.



2. 문제 해결 코드

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> answerList = new ArrayList<>();
        Queue<Work> queue = new LinkedList<>();

        for (int i = 0; i < progresses.length; i++) {
            queue.offer(new Work(progresses[i], speeds[i]));
        }

        int days = 1;

        while (!queue.isEmpty()) {
            int cnt = 0;
            while (!queue.isEmpty()) {
                Work work = queue.peek();
                if (!work.isDone(days)) {
                    break;
                }
                queue.poll();
                cnt++;
            }

            if (cnt > 0) {
                answerList.add(cnt);
            }
            days++;
        }

        return answerList.stream().mapToInt(i -> i).toArray();
    }
}

class Work {
    private int progress;
    private int speed;

    Work(int progress, int speed) {
        this.progress = progress;
        this.speed = speed;
    }

    public boolean isDone(int days) {
        return this.progress + (days * speed) >= 100;
    }
}

좋은 웹페이지 즐겨찾기