import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
List<Integer> answer = new ArrayList<>(); // 정답을 담을 리스트 생성
int n = progresses.length;
int[] days = new int[n]; // 작업 완료에 필요한 날짜를 담을 배열 생성
// 작업 완료에 필요한 날짜 계산
for (int i = 0; i < n; i++) {
days[i] = (100 - progresses[i]) % speeds[i] == 0 ? (100 - progresses[i]) / speeds[i] : (100 - progresses[i]) / speeds[i] + 1;
}
int i = 0;
while (i < n) {
int cnt = 0; // 배포되는 작업의 수를 카운트합니다.
int maxDay = days[i]; // 현재까지의 최대 배포일을 저장합니다.
// 현재 작업 이후의 작업들을 검사합니다.
while (i < n && days[i] <= maxDay) {
cnt++; // 현재 배포될 작업의 수를 증가시킵니다.
i++; // 다음 작업을 검사하기 위해 인덱스를 증가시킵니다.
}
answer.add(cnt); // 배포할 작업들의 수를 리스트에 추가합니다.
}
// 리스트를 배열로 변환합니다.
int[] result = new int[answer.size()];
for (int j = 0; j < answer.size(); j++) {
result[j] = answer.get(j);
}
return result;
}
}
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> q = new LinkedList<>();
int n = progresses.length;
// 각 작업의 배포 날짜 계산
for (int i = 0; i < n; i++) {
int days = (int) Math.ceil((double)(100 - progresses[i]) / speeds[i]);
q.offer(days);
}
// 각 배포마다 몇 개의 작업이 배포되는지 계산
List<Integer> answerList = new ArrayList<>();
int cnt = 1;
int prev = q.poll();
while (!q.isEmpty()) {
int cur = q.poll();
if (prev >= cur) {
cnt++;
} else {
answerList.add(cnt);
cnt = 1;
prev = cur;
}
}
answerList.add(cnt);
// List를 int 배열로 변환하여 반환
int[] answer = new int[answerList.size()];
for (int i = 0; i < answerList.size(); i++) {
answer[i] = answerList.get(i);
}
return answer;
}
}
java.util.Deque;
import java.util.LinkedList;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Deque deque = new LinkedList();
for (int i = 0; i < progresses.length; i++) {
deque.offer(progresses[i]);
}
int Cnt = 0;
int[] day = new int[progresses.length];
int[] answer = new int[progresses.length];
for (int i = 0; i < progresses.length; i++) {
int remain = (100 - progresses[i]) % speeds[i];
int value = (100 - progresses[i]) / speeds[i];
if (remain == 0) {
day[i] = value;
} else {
day[i] = value + 1;
}
}
for (int i = 0; i < progresses.length; i++) {
if (day[i] < day[i + 1]) {
deque.poll();
day[i + 1] = day[i + 1] - day[i];
Cnt = day[i];
break;
} else if (day[i] > day[i + 1]) {
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42586