my study.

Coding Test/Programmers

[프로그래머스] 기능개발, java

fftl 2025. 1. 21. 11:56

- 문제

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

- 풀이

import java.util.*;

class Solution {
    public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
        //현재 가장 앞에 있는 작업의 인덱스입니다.
        int idx = 0;
        
        //작업의 수를 미리 받아, 작업의 완료를 판단하기 위해 사용합니다.
        int size = progresses.length;
        
        //정답 배열의 개수를 확신할 수 없기에 ArrayList를 이용해 편하게 입력받았습니다.
        ArrayList<Integer> list = new ArrayList<>();
        
        //idx가 size에 도달하면 모든 작업이 배포된 것으로 판단할 수 있습니다.
        while(idx<size){
            
            //먼저 그 날에 작업을 진행해줍니다.
            for(int i=0; i<size; i++){
                progresses[i] += speeds[i];
            }
            
            //배포는 하루의 끝에 이루어지기 때문에 작업이 진행된 뒤 판단해줍니다.
            if(progresses[idx]>=100){
                
                //일단 해당 if문에 들어왔다는 것은 1개 이상의 작업이 완료되었기에
                //cnt를 1로 할당하고, 연속되어 완료된 작업이 있는지 판단합니다.
                int cnt = 1;
                
                //다음 작업을 확인합니다.
                idx++;
                
                //다음 작업이 size 이내이고, 작업이 완료되어 있다면, 계속 cnt에 추가해주고
                //다음 작업을 확인하기 위해 idx를 증가시켜줍니다.
                while(idx<size && progresses[idx] >= 100){
                    cnt++;
                    idx++;
                }
                
                //오늘 하루동안 배포된 작업의 개수를 list에 추가해줍니다.
                list.add(cnt);
            }
        }
        
        //완성된 list를 반환합니다.
        return list;
    }
}