[프로그래머스] 기능개발 42586 (JAVA)

dia·2023년 10월 6일
0

풀이방식

  1. ArrayList 각 날마다 배포할 기능 개수, Queue 배포가 이루어지는 날짜
  2. '날짜 = progresses 진척도 / speeds 속도'에서 나머지가 있으면 하루 추가해주기
  3. 현재 기능 배포일과 다음 기능 배포일 비교
    3-1. 현재 기능 배포일이 다음 기능 배포일보다 나중이면, 다음 기능을 현재 기능과 같이 배포
    3-2. 현재 기능 배포일이 다음 기능 배포일보다 먼저라면, 배포 진행 및 다음 배포일 검사

구현

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

public class NUM42586 {
    public static void main(String[] args) {
        int[] progresses = {95, 90, 99, 99, 80, 99};
        int[] speeds = {1, 1, 1, 1, 1, 1};
        System.out.println(solution(progresses, speeds));
    }
    public static int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};

        ArrayList<Integer> counts = new ArrayList<>();
        Queue<Integer> days = new LinkedList<>();

        for (int i = 0; i < progresses.length; i++) {
            if ((100 - progresses[i]) % speeds[i] == 0) days.add((100 - progresses[i]) / speeds[i]);
            else days.add((100 - progresses[i]) / speeds[i] + 1);
        }

        int day = days.poll();
        int count = 1;
        while (!days.isEmpty()) {
            if (day >= days.peek()) {
                days.poll();
                count++;
            } else {
                counts.add(count);
                day = days.poll();
                count = 1;
            }
        }
        counts.add(count);

        answer = new int[counts.size()];
        for (int i = 0; i < counts.size(); i++) {
            answer[i] = counts.get(i);
        }

        return answer;
    }
}

*다른 분들의 코드를 참고하여 작성했습니다

profile
CS 메모장

0개의 댓글