본문 바로가기
Algorithm/Programmers

프로그래머스 42586번 기능 개발

by eurowondollaryen 2022. 8. 8.

문제

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

풀이

간단한 구현 문제 라고 생각했으나, 뇌가 굳었는지 배포 그룹을 묶는 부분에서 좀 막혔다.

 

풀이

1. 작업별로 처리일수를 계산한다(이건 쉬움)

2. 처리일수 배열을 순회하면서 앞의 처리일수가 뒤의 처리일수보다 높으면, 함께 배포해야 하므로, count하는 방식으로 계산.

import java.util.*;
class Solution {
    public int[] arrayListToArray(ArrayList<Integer> input) {
        int[] result = new int[input.size()];
        
        for(int i = 0; i < input.size(); ++i) {
            result[i] = input.get(i);
        }
        return result;
    }
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer;
        ArrayList<Integer> processDays = new ArrayList<Integer>();
        
        //처리일수 계산
        for(int i = 0; i < progresses.length; ++i) {
            int processDay = (100 - progresses[i]) / speeds[i];
            if ((100 - progresses[i]) % speeds[i] > 0) processDay++;
            
            processDays.add(processDay);
        }
        
        //정답 계산
        ArrayList<Integer> answerArrayList = new ArrayList<Integer>();
        
        //앞의 처리시간이 뒤보다 크거나 같을 경우, 함께 배포한다.
        int j = 0;
        int cnt = 0;
        for(int i = 0; i < processDays.size(); ++i) {
            cnt = 1;
            for(j = i + 1; j < processDays.size(); ++j) {
                if(processDays.get(i) < processDays.get(j)) {
                    i = j - 1;
                    break;
                }
                cnt++;
            }
            answerArrayList.add(cnt);
            if(j == processDays.size()) break;
        }
        
        answer = arrayListToArray(answerArrayList);
        return answer;
        
    }
}