
내가 작성한 코드
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> numberOfDays = new LinkedList<>(); // 각 기능이 완성되기까지 걸리는 일 수를 저장하는 큐
List<Integer> answerList = new ArrayList<>(); // 기능별 배포 개수를 저장할 리스트
int count = 1; // 현재 배포할 기능의 개수를 세는 변수
// 각 기능 완성까지 걸리는 일 수 계산 후 큐에 저장
// Math.ceil()을 사용하여 올림 처리
for (int i = 0; i < progresses.length; i++) {
int days = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]);
numberOfDays.offer(days);
}
// poll() >> 큐의 맨 앞에 있는 값을 꺼내면서 제거
int currentDays = numberOfDays.poll(); // 현재 배포까지 걸린 일 수
while (!numberOfDays.isEmpty()) {
int nextDays = numberOfDays.poll(); // 다음 기능이 완성되기까지 걸리는 일 수
if (currentDays >= nextDays) { // 현재 기능이 다음 기능보다 완성되는 날이 같거나 더 늦다면
count++;
} else { // 현재 기능이 다음 기능보다 먼저 완성된다면
answerList.add(count);
currentDays = nextDays;
count = 1;
}
}
answerList.add(count);
return answerList.stream().mapToInt(Integer::intValue).toArray();
}
}
다른 사람의 코드
import java.util.*;
// 진행도를 계산하여 처리하는 방식식
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] dayOfend = new int[100]; // 걸린 일 수 카운트용 배열
int day = 0; // 현재 진행 중인 작업의 일 수
for (int i = 0; i < progresses.length; i++) {
// 진행도 계산 >> 지난일 수 * 속도 + 현재 진행도 >= 100이 될 때까지
while (progresses[i] + (day * speeds[i]) < 100) {
day++;
}
dayOfend[day]++;
}
return Arrays.stream(dayOfend).filter(i -> i != 0).toArray();
}
}
Share article