코딩테스트/프로그래머스

[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