알고리즘 & 자료구조/문제 풀이

[프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 기능 개발

수수다 2026. 4. 24. 19:42

https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=java

 

프로그래머스

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

programmers.co.kr

 

1. 각 기능의 남은 배포 기간을 구한다. (= 배포되는 날짜)

2. 처음 배포되는 날짜를 기준으로 다음 기능이 더 작다면 같이 배포(cnt++)

3. 다음 기능이 더 크다면 같이 배포 못하니까 기준을 더 큰 기능 날짜로 바꿔주고 현재까지 카운트된 기능 배포(answer.add(cnt))

4. 반복

주의) 항상 기준과 다음을 비교해서 기준 시점에 배포하기 때문에 기준이 마지막인 것은 따로 배표해줘야함

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int length = progresses.length;
        int[] deployDay = new int[length];
        for(int i=0; i<length; i++) {
            int remain = 100 - progresses[i];
            deployDay[i] = remain % speeds[i] == 0 ? remain / speeds[i] : (remain / speeds[i]) + 1;
        }
        ArrayList<Integer> answer = new ArrayList<>();
        int currentDeployDay = deployDay[0];
        int cnt = 1;
        for(int i=1; i<length; i++){
            if(currentDeployDay >= deployDay[i]) {
                cnt++;
            } else {
                answer.add(cnt);
                currentDeployDay = deployDay[i];
                cnt = 1;
            }
        }

        answer.add(cnt);
        
        int[] result = new int[answer.size()];
        for (int i = 0; i < answer.size(); i++) {
            result[i] = answer.get(i);
        }
        return result;
    }
}