1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
// 100%까지 남은 작업일수를 구하여 큐에 삽입한다.
// 1. 먼저 progresses의 각 원소마다 100에서 뺄셈한다.
// 2. 주어진 speeds로 나눈 나머지가 없다면 몫이 남은 일수, 나머지가 0보다 크다면 하루를 더 보내어야 하기 때문에 몫+1이 남은 일수가 된다.
Queue<Integer> q = new LinkedList<>();
for(int i = 0; i < speeds.length; i++){
int day = 100 - progresses[i];
if(day % speeds[i] == 0) {
q.offer(day/speeds[i]);
} else {
q.offer(day/speeds[i]+1);
}
}
// 배포될 기능 개수를 담을 리스트 선언
List<Integer> list = new ArrayList<>();
// 날짜별 배포될 기능 개수
int cnt = 0;
// 큐의 맨 앞 요소를 미리 저장,
int first = q.peek();
// 1. 큐가 비어질 때까지 순회하면서 배포 카운트를 1씩 증가시킨다.
// 2. 이때, 큐에서 원소를 하나씩 꺼내어(now) 맨 앞 요소로 저장해놓은 first와 비교한다.
// 3. first가 now보다 작다면 첫번째 작업 이후의 작업에서 100% 작업이 완료된 기능이 있다는 것으로 간주하여 배포 개수를 1 증가시킨다.
while(!q.isEmpty()) {
int now = q.poll();
if(first < now) {
list.add(cnt);
cnt = 0;
first = now;
}
cnt++;
}
// 누락된 기능 배포 개수를 리스트에 마저 담는다.
list.add(cnt);
int[] answer = list.stream().mapToInt(i -> i).toArray();
return answer;
}
public static void main(String[] args) {
Solution sol = new Solution();
// int[] progresses = new int[]{93, 30, 55};
// int[] speeds = new int[]{1, 30, 5};
int[] progresses = new int[]{95, 90, 99, 99, 80, 99};
int[] speeds = new int[]{1, 1, 1, 1, 1, 1};
sol.solution(progresses, speeds);
}
}
|