알고리즘 & 자료구조/문제 풀이
[프로그래머스 알고리즘 고득점 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;
}
}
