🌞Algorithm/🔥programmers
[programmers] 기능개발
뿌야._.
2026. 8. 24. 11:44
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42586
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
< 기능개발 >
문제 풀이 (Java)
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = {};
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < progresses.length; i++) {
int num = 100 - progresses[i];
int day = num / speeds[i];
if (num % speeds[i] != 0) {
day += 1;
}
if (i > 0 && list.get(list.size() - 1) > day) {
day = list.get(list.size() - 1);
}
list.add(day);
}
ArrayList<Integer> result = new ArrayList<>();
int temp = list.get(0);
int cnt = 0;
for (int i = 0; i < list.size(); i++) {
if (temp == list.get(i)) {
cnt += 1;
} else {
result.add(cnt);
temp = list.get(i);
cnt = 1;
}
}
if (cnt > 0) {
result.add(cnt);
}
answer = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
answer[i] = result.get(i);
}
return answer;
}
}
progresses와 speeds를 보며 배포 날짜를 구해 ArrayList에 저장한다. 이때, 바로 앞의 기능보다 적게 걸린다면 앞에 있는 기능과 함께 배포되어야 하므로 앞의 기능과 날짜를 맞춘다. ArrayList를 살펴보며 같은 날짜에 몇 개를 배포하는지 각 개수를 세어 ArrayList에 저장한다. ArrayList의 값을 배열에 저장해 반환한다.

출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges