알고리즘/프로그래머스
[프로그래머스] 기능개발 (Java/자바)
행복한 개복치
2022. 7. 4. 18:55
https://programmers.co.kr/learn/courses/30/lessons/42586
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
풀이 방법
작업의 남은 작업일수를 큐(q)에 저장해두고
남은 작업일수가 앞의 작업일수보다 클때까지 큐에서 poll() 하면서 배포 가능한 기능의 개수를 세주었다.
package Programmers;
import java.util.*;
class Solution_기능개발 {
public int[] solution(int[] progresses, int[] speeds) {
if(progresses.length==1){
return new int[] {1};
}
// 작업이 끝나기까지 남은 일수 계산
Queue<Integer> q = new ArrayDeque<>();
for(int i=0; i<progresses.length; i++){
int remain = (100 - progresses[i]) / speeds[i];
if((100 - progresses[i]) % speeds[i]==0){
q.offer(remain);
} else{
q.offer(remain+1);
}
}
// int[] 배열의 크기를 알 수 없으니 배포되는 기능의 개수를 임시로 큐에 넣어줌
Queue<Integer> distribute = new ArrayDeque<>();
int size = q.size();
while(size>1){
int cnt = 1;
int front = q.poll();
int next = q.peek();
while(front>=next){
cnt++;
q.poll();
if(size-cnt>0){
next = q.peek();
} else{
break;
}
}
distribute.offer(cnt);
size -= cnt;
}
// 맨 마지막에 남은 작업
if(size==1){
distribute.offer(1);
}
// 구한 정답을 int 배열에 넣어줌
int[] answer = new int[distribute.size()];
int index = 0;
while(!distribute.isEmpty()){
answer[index++] = distribute.poll();
}
return answer;
}
}