프로그래머스 - 기능개발
풀이
- progresses를 순회하면서
개발까지 남은 양 / 개발 속도
값을 담은 배열 time을 만들어줌 -> 개발까지 남은 일수를 계산
❗️나누어 떨어지지 않는 경우 하루가 더 걸림
- ArrayList 자료형을 선언해서 time을 순회하면서 한 번에 배포할 수 있는 progresses의 개수를 세어 추가
➡️ max를 정해서 max보다 작은 값을 만나면 count++ (한 번에 배포할 수 있는 프로그램의 수)
➡️ max보다 큰 값을 만나면 count를 리스트에 추가하고 max값으로 저장
코드
import java.util.*;
public class FunctionDevelopment {
public int[] solution(int[] progresses, int[] speeds) {
int[] time = new int[progresses.length];
for (int i = 0; i < progresses.length; i++) {
time[i] = ((100 - progresses[i]) / speeds[i]) + ((100 - progresses[i]) % speeds[i] > 0 ? 1 : 0);
}
List<Integer> result = new ArrayList<>();
int max = time[0];
int count = 1;
for (int i = 1; i < time.length; i++) {
if (time[i] <= max) {
count++;
}
else {
max = time[i];
result.add(count);
count = 1;
}
}
result.add(count);
int[] resultArr = new int[result.size()];
for (int i = 0; i < result.size(); i++) resultArr[i] = result.get(i);
return resultArr;
}
public static void main(String[] args) {
FunctionDevelopment functionDevelopment = new FunctionDevelopment();
System.out.println(Arrays.toString(functionDevelopment.solution(new int[]{93, 30, 55}, new int[]{1, 30, 5})));
System.out.println(Arrays.toString(functionDevelopment.solution(new int[]{1, 1, 1, 1}, new int[]{100, 50, 99, 100})));
}
}