
import java.util.*;
class Solution {
public List<Integer> solution(int[] progresses, int[] speeds) {
List<Integer> answer = new ArrayList<>();
int[] days = new int[progresses.length];
for(int i = 0; i < progresses.length; i++) {
days[i] = (int) Math.ceil((100-progresses[i])/speeds[i]);
}
int cnt = 1;
int now = days[0];
for(int i = 1; i < days.length; i++) {
if(days[i] <= now) {
cnt++;
} else {
answer.add(cnt);
cnt = 1;
now = days[i];
}
}
answer.add(cnt);
return answer;
}
}
days[i] = (int) Math.ceil((100-progresses[i])/speeds[i]);
해당 라인에서 문제가 발생했다.
정수의 나눗셈은 소숫점을 버리기 때문에 올바른 결과가 도출되지 않을 수 있다.
따라서 실수 나눗셈을 수행한 후 Math.ceil을 수행하고, int형으로 변화이 필요하다.
import java.util.*;
class Solution {
public List<Integer> solution(int[] progresses, int[] speeds) {
List<Integer> answer = new ArrayList<>();
int[] days = new int[progresses.length];
for(int i = 0; i < progresses.length; i++) {
days[i] = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]);
}
int cnt = 1;
int now = days[0];
for(int i = 1; i < days.length; i++) {
if(days[i] <= now) {
cnt++;
} else {
answer.add(cnt);
cnt = 1;
now = days[i];
}
}
answer.add(cnt);
return answer;
}
}