모든 기능이 하루에 1%씩 작업이 가능하므로, 작업이 끝나기까지 남은 일수는 각각 5일, 10일, 1일, 1일, 20일, 1일입니다. 어떤 기능이 먼저 완성되었더라도 앞에 있는 모든 기능이 완성되지 않으면 배포가 불가능합니다.
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = {};
Queue<Integer> queue = new LinkedList<Integer>();
ArrayList<Integer> ans = new ArrayList<Integer>();
for(int i=0; i<progresses.length; i++){
int progress = progresses[i];
int speed = speeds[i];
int dateUntilDeploy = calculDate(progress, speed);
queue.add(dateUntilDeploy);
}
int pivot = queue.poll();
int cnt = 1;
while(!queue.isEmpty()){
int num = queue.poll();
if(pivot >= num){
cnt++;
}
else{
ans.add(cnt);
pivot = num;
cnt = 1;
}
}
ans.add(cnt);
answer = new int[ans.size()];
for(int i=0; i<ans.size(); i++)
answer[i] = ans.get(i);
return answer;
}
public int calculDate(int p, int s){
return (100 - p) % s == 0 ? (100 - p) / s : (100 - p) / s + 1;
}
}
아직 코드를 작성하는 요령이 부족한 것 같다.
문제를 해결하는 논리과정을 생각하는데 집중하느라 클린코드나 코드 표현력에 신경쓸 여유가 없다.
동일한 기능을 수행하더라도 가독성이 좋고 이해가 잘 가는 코드를 작성하고 싶다.