코딩테스트/프로그래머스
[Java] 프로그래머스 - 기능개발 (2단계)
배똥회장
2022. 4. 13. 10:47
728x90
코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | O |
본인의 실력으로 풀었는가? | O |
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> list = new ArrayList<>();
int[] arr = new int[progresses.length];
int day = 0;
int num = 0;
for (int i = 0; i < progresses.length; i++) {
arr[i] = (100-progresses[i]) / speeds[i];
arr[i] += ((100-progresses[i]) % speeds[i] == 0) ? 0 : 1;
if (i != 0) {
if (arr[i] <= arr[i-1]) {
arr[i] = day;
num++;
} else {
list.add(num);
day = arr[i];
num = 1;
}
} else {
day = arr[i];
num = 1;
}
}
list.add(num);
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
테스트 1 〉 | 통과 (1.95ms, 75.8MB) |
테스트 2 〉 | 통과 (2.08ms, 79.1MB) |
테스트 3 〉 | 통과 (1.97ms, 73.9MB) |
테스트 4 〉 | 통과 (2.64ms, 77.4MB) |
테스트 5 〉 | 통과 (1.89ms, 76.6MB) |
테스트 6 〉 | 통과 (1.71ms, 77.2MB) |
테스트 7 〉 | 통과 (1.86ms, 79.9MB) |
테스트 8 〉 | 통과 (1.97ms, 77.1MB) |
테스트 9 〉 | 통과 (1.92ms, 71.3MB) |
테스트 10 〉 | 통과 (1.85ms, 74.2MB) |
테스트 11 〉 | 통과 (2.14ms, 75.1MB) |
테스트 케이스 1번의 예시를 보면 아래의 표로 표현할 수 있다.
progresses | 93 | 30 | 55 |
speeds | 1 | 30 | 5 |
표를 보고 남은 작업량을 구하면
100 - 93 = 7 | 100 - 30 = 70 | 100 - 55 = 45 |
그리고 남은 작업량을 처리하는 일 수를 구하려면 먼저 작업량 / 하루 처리 가능 양으로 나누는데,
소수점을 이용하지 않기 때문에 만약에 나머지가 0이 아니라면 1을 더해주는 식으로 계산한다.
7 / 1 = 7 7 % 1 = 0 => 7일 |
70 / 30 = 2 70 % 30 = 10 => 2 + 1 = 3일 |
45 / 5 = 9 45 % 5 = 0 => 9일 |
그리고 이 전의 작업이 끝나지 않으면 끝날 때까지 기다려야 하기 때문에 아래와 같이 표현할 수 있다
7일 | 7일 | 9일 |
그래서 나의 경우에는 날짜가 앞의 배열보다 클 경우에만 arraylist에 넣는 것으로 계산했다.
728x90