로직
배포에 필요한 일수를 각각 계산한 뒤 해당 리스트를 순회한다.
앞의 일수가 pivot이 되어
- pivot >= day 일 경우
→ 함께 배포해야하기 때문에 count - pivot < day 일 경우
→ 다음 날 배포해야하기 때문에 count를 리턴할 리스트에 넣어주고 현재 day가 새로운 pivot이 되어 새로 count를 시작한다.
코드
import java.util.ArrayList;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] days = new int[speeds.length];
ArrayList<Integer> deployment = new ArrayList<Integer>();
// get days
for(int i = 0 ; i < days.length; i++){
double rest = (double) 100 - progresses[i];
double needDays = Math.ceil(rest / speeds[i]);
days[i] = (int) needDays;
}
// deployment group
int deployDay = days[0], count = 0;
for(int day : days){
if(deployDay < day){
deployment.add(count);
count = 1;
deployDay = day;
}
else count +=1;
}
deployment.add(count);
return deployment.stream().mapToInt(i -> i).toArray();
}
}
여기서 주의해야할 점은
days[i] = (int) Math.ceil((100 - progresses[i]) / speeds[i]);
이 아니라는거다.
stackoverflow.com/questions/32571909/java-integer-double-division-confusion
int sum = 30;
double division = sum / 4;
// 답은 7.0
double division2 = (double) sum / 4;
// 답은 7.5
// 연산자 우선순위에서 type casting이 높기 때문에 sum을 doulbe로 casting 해준 뒤에 / 연산을 한다
int와 double을 혼용하여 연산을 진행할 때 주의해야한다.
'코테 준비' 카테고리의 다른 글
[프로그래머스 - 카카오] 크레인 인형뽑기 게임 - Java (0) | 2020.10.19 |
---|---|
[프로그래머스] 스킬트리- Java (0) | 2020.10.16 |
[프로그래머스] 완주하지 못한 선수 - Java (0) | 2020.10.13 |
[프로그래머스] 삼각 달팽이 (0) | 2020.10.11 |
[프로그래머스] 가장 긴 팰린드롬 (0) | 2020.09.29 |