문제 풀이/프로그래머스

[프로그래머스] 기능개발(JAVA)

27200 2024. 4. 24. 22:18

https://school.programmers.co.kr/learn/courses/30/lessons/42586


풀이

import java.io.*;
import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        for(int i = 0; i < progresses.length; i++) {
            int leftProgress = (100 - progresses[i]);
            progresses[i] = leftProgress/speeds[i];
            if(leftProgress%speeds[i] != 0) {
                progresses[i]++;
            }
        }

        ArrayList<Integer> list = new ArrayList<>();
        int count = 1;
        int maxTime = progresses[0];
        for(int i = 1; i < progresses.length; i++) {
            if(progresses[i] <= maxTime) {
                count++;
            }else{
                maxTime = progresses[i];
                list.add(count);
                count = 1;
            }
        }
        if(maxTime >= progresses[progresses.length - 1]){
            list.add(count);
        }

        int[] answer = new int[list.size()];
        for(int i = 0; i < list.size(); i++){
            answer[i] = list.get(i);
        }


        return answer;
    }
}

 

먼저 남은 작업 일자를 구하기 위해 100에서 진행율을 뺀 뒤에 속도로 나눈다.

다만 나머지가 있는 경우 1일을 더 생각해야되기 때문에 나머지 계산도 진행한다.

 

이후 최고 작업 시간과 비교하여 list에 추가해준다.

마지막으로 배열의 마지막 위치는 값이 들어가지 않을 수 있기 때문에 이에 대한 비교까지 마친 후에 answer 배열을 완성한다.