
기능 개발 - level 2
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = {};
Queue<Integer> q = new ArrayDeque<>();
int n = progresses.length;
for(int i = 0; i < n;i++){
int days = (100 - progresses[i] + speeds[i] - 1) / speeds[i];
q.offer(days);
}
List<Integer> list = new ArrayList<>();
while(!q.isEmpty()){
int count = 1;
int job = q.poll();
while(!q.isEmpty() && q.peek() <= job){
q.poll();
count++;
}
list.add(count);
}
answer = new int[list.size()];
for (int i = 0; i < list.size();i++){
answer[i] = list.get(i);
}
return answer;
}
}
푼 방법
- 책이랑 조금 다르게 배포 전까지의 최소 날짜를 큐에 넣었다.
- 먼저 끝내도 배포를 못하기 때문에 순서대로 큐에 넣고, 다음 작업의 최소 남은 일수가 현재 끝낸 작업의 일수보다 작거나 같으면 같이 배포하는 걸로 처리한다.
회고
- 큐를 써서 풀긴 했는데 꼭 쓸 필요는 없는 것 같다.
- 핵심 아이디어? 가 딱히 없는 것 같아서 금방 풀었다. 그냥 배포 가능하면 같이 한다 정도..?
- stream을 쓰면 코드가 간결해서 쓰려고 했는데 성능이 안좋아지는 것 같아서 그냥 stream 없이 했다.