문제
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
'🌞Algorithm > 🔥programmers' 카테고리의 다른 글
| [programmers] 구명보트 (0) | 2026.08.20 |
|---|---|
| [programmers] 체육복 (0) | 2026.08.19 |
| [programmers] 모의고사 (0) | 2026.08.18 |
| [programmers] 더 맵게 (0) | 2026.08.14 |
| [programmers] 주식가격 (0) | 2026.08.13 |