알고리즘/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;
}
}