알고리즘/PROGRAMMERS

기능개발(Lv.2)

현대타운301 2024. 3. 22. 18:01

 


 

문제 설명

 

 

 

입출력 예시

 

 

요약

배포 순서는 정해져 있는 상태에서 기능 개발이 완료된 프로세스는 함께 배포

 


 

풀이

 

접근 방식

1. 기능개발까지 남은 일 수 계산

  → 남은 일 수 : (100 - 진행현황) / 속도

 

2. 배포단계에 있는 프로세스의 남은 일수와 같거나 적은 프로세스는 함께 배포

  → Queue 형식으로 데이터 조회

 


 

코드리뷰

 

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        List<Integer> remains = new ArrayList<>();
        List<Integer> answerList = new ArrayList<>();

        for(int i = 0; i < progresses.length; i++) {
            int remain = (int)Math.ceil((double)(100 - progresses[i])/(double)speeds[i]);	// 남은 일 수 계산
            remains.add(remain);
        }
        while(!remains.isEmpty()) {
            int count = 1;
            int remain = remains.remove(0);	// FIFO 형식으로 데이터 조회
            for(int i = 0; i < remains.size(); i++) {
                if(remain >= remains.get(i)) {	// 현재 프로세스의 남은 일수가 다음 배포단계의 프로세스의 남은 일수 이상이면
                    remains.remove(i);	// 다음 배포단계 프로세스도 Queue에서 제거
                    count++;	// 배포할 프로세스 개수 증가
                    i--;	// i를 다시 0으로 만들기 위해 하나 감소
                } else {
                    break;	// 남은 일수가 더 크면 탈출
                }
            }
            answerList.add(count);	// 함께 배포할 수 있는 프로세스의 수를 list에 add
        }
        int[] answer = new int[answerList.size()];
        for(int i = 0; i < answer.length; i++) {
            answer[i] = answerList.get(i);
        }
        return answer;
    }
}