이번에 풀어본 문제는
프로그래머스 기능개발 입니다.
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer;
List<Integer> answerAl = new ArrayList<>();
int pSize = progresses.length;
Queue<Integer> q = new LinkedList<>();
for (int i = 0; i < pSize; i++) {
int speed = speeds[i];
int diff = 100 - progresses[i]; // 남은 작업량
int day = (diff / speed);
// 나누어 떨어지지 않으면 +1
if ((diff % speed) != 0) day++;
q.add(day);
}
while(!q.isEmpty()) {
int maxValue = q.poll();
int cnt = 1;
while (!q.isEmpty()) {
if(q.peek() <= maxValue) {
cnt++;
q.poll();
}
else break;
}
answerAl.add(cnt);
}
int alSize = answerAl.size();
answer = new int[alSize];
for (int i = 0; i < alSize; i++) answer[i] = answerAl.get(i);
return answer;
}
}
우선순위가 높은 작업이 완료되었을 때, 후순위의 작업들도 완료되었다면 모아서 한번에 배포시키는 문제입니다.
각 작업들이 완료되기까지 필요한 날짜를 모두 구해놓고, 현재 우선순위가 가장 높은 작업보다 완료날짜가 큰 값이 나올때까지 카운트를 더해주면 해결할 수 있습니다.
요즘 시간분배를 못하고 있어서 알고리즘 문제풀이에 조금 소홀한거같은데, 좀 더 노력해서 꾸준히 풀어볼 생각입니다!