Development Logs/Algorithms
[JAVA] 프로그래머스 : 기능개발 (코딩테스트 고득점 kit > 스택/큐)
유뱅유뱅뱅
2020. 7. 14. 20:56
반응형
https://programmers.co.kr/learn/courses/30/lessons/42586
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 ��
programmers.co.kr
큐를 사용하여 구현함
해당 기능 완료하는데 걸리는 날을 미리 계산하여 Queue에 저장함
import java.util.*;
// 기능개발
// 큐 사용(병렬 스케줄링)
// 각각의 기능 개발
// 순서대로 배포 되야함
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> results = new ArrayList<>();
// 해당 기능 완료하는데 걸리는 날 Queue
Queue<Integer> q = new LinkedList<>();
int day = 0;
for(int i=0; i<progresses.length; i++){
if((100 - progresses[i]) % speeds[i] == 0 ){
day = (100 - progresses[i]) / speeds[i];
}
else{
day = (100 - progresses[i]) / speeds[i];
day += 1;
}
q.offer(day);
}
// 7 3 9
int cnt;
while(!q.isEmpty()){
// 기능 배포 수
cnt = 0;
// 첫 번째 기능 걸리는 날보다 작은 날 까지 배포 가능하므로 cnt++
for(int i=0; i<q.size(); i++){
if(q.peek() >= (int)q.toArray()[i]){
cnt++;
}else{
break;
}
}
// 가능한 기능 전부 배포 했으므로 poll
for(int i=0; i<cnt; i++){
q.poll();
}
// 몇 개의 기능 배포했는지 저장
results.add(cnt);
}
// ArrayList -> array 변환
int[] answer = new int[results.size()];
int idx = 0;
for(int result : results){
answer[idx++] = result;
}
return answer;
}
}
반응형