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

조예빈·2024년 7월 2일
0

Coding Test

목록 보기
26/138

https://school.programmers.co.kr/learn/courses/30/lessons/42586

뒤에 있는 기능이 먼저 개발되어도 앞의 기능이 끝나야 배포가 가능하므로 우선 기능 개발까지의 필요한 기간을 queue에 저장해둔다. 이후 큐의 최상단 요소와 그 다음 요소들을 계속 비교해 최상단요소보다 작으면 배포가 가능한 것이므로 모두 빼 주고, cnt를 해 주도록 구현하였다.

import java.util.*;

class Solution {
    public ArrayList solution(int[] progresses, int[] speeds) {
        //새로운 큐에 개발 속도를 update해서 저장
        //개발 완료 일 = (100-progresses[i]) / speeds[i]
        int length = progresses.length;
        Queue<Integer> queue = new LinkedList<>();
        ArrayList<Integer> list = new ArrayList<>();
        for(int i=0;i<length;i++){
             int days = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]);
            queue.add(days);
        }
        while(!queue.isEmpty()){ //큐가 차 있을 때
            int cnt = 1; //맨 앞에 꺼는 배포가 가능
            int first = queue.poll(); //맨 앞 데이터 꺼내기
            while(!queue.isEmpty() && first >= queue.peek()){ //꺼낸 데이터보다 큐의 맨 앞 데이터가 작거나 같으면 계속 꺼내기
                queue.poll(); //큐에서 요소를 꺼냄
                cnt++;
            }
            list.add(cnt); //배열에 넣어줌
        }
        return list;
    }
}
profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러

0개의 댓글