이 문제는 각 기능별로 개발 완료까지 남은 일수를 계산하고,
앞 기능이 완료되지 않으면 뒤 기능도 함께 대기해야 하는 상황을 시뮬레이션하는 문제
즉, 뒤에 있는 기능이 먼저 완성돼도 앞 기능이 끝날 때까지 기다렸다가 함께 배포돼어야 함
여러 기능이 동시에 개발 중인데, 앞에 있는 기능이 완성되지 않으면 뒤에 있어도 배포가 지연되는 구조
- 각 기능별로 남은 작업일을 계산
- Queue를 사용해 순서를 유지
- 앞 기능 보다 빠르게 끝난 기능들을 같은 날 묶어서 배포
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> queue = new LinkedList<>();
int n = progresses.length;
// 각 작업이 완료되기까지 걸리는 남은 일수 계산
int[] daysLeft = new int[n];
for (int i = 0; i < n; i++) {
// Math.ceil을 사용해 올림 처리 -> 하루 단위로 배포되므로 소수점 이하는 올림
daysLeft[i] = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]);
}
int count = 0; // 현재 배포 그룹의 기능 개수
int maxDay = daysLeft[0]; // 현재 배포 그룹의 기준일 (앞 기능이 끝나는 날짜)
for (int i = 0; i < n; i++) {
if (daysLeft[i] <= maxDay) {
// 앞 기능보다 먼저 혹은 같은 날 끝나면 함께 배포 가능
count++;
} else {
// 앞 기능보다 늦게 끝나면 새 배포 그룹 시작
queue.add(count); // 지금까지 묶인 배포 개수 저장
count = 1; // 새로운 그룹 시작
maxDay = daysLeft[i]; // 새 기준일 갱신
}
}
// 마지막 그룹도 추가
queue.add(count);
// Queue -> int[] 변환
return queue.stream().mapToInt(i -> i).toArray();
}
}
'알고리즘 문제풀이 > 프로그래머스 문제풀이' 카테고리의 다른 글
프로그래머스 문제 풀이 - 할인 행사 (해시 맵) (2) | 2025.08.06 |
---|---|
프로그래머스 문제 풀이 - 완주하지 못한 선수 (해시 맵) (2) | 2025.08.05 |
프로그래머스 문제 풀이 - 올바른 괄호(스택) (2) | 2025.08.04 |