📝 문제
🔥 시도해본 접근 방식
함수의 인자로 주어지는 progresses를 speeds배열에서 대응 되는 값을 더해가면서,
배포가 가능한 progresses 원소를 제거하고 모두 제거 될때 까지 반복하여
배포 회차별 배포 사이즈 배열을 반환하도록 하는 전략을 세웠다.
1. progresses에 모든 원소가 제거될때 까지 반복하는 반복문을 선언한다.
2. 반복문 안에서 작업 속도 speeds에 따라 progresses를 갱신한다.
3. progresses의 첫번째 원소부터 연속적으로 100이상인 원소의 갯수를 카운트 한다.
4. 배포 회차별 배포 사이즈를 기록하고, progresses와 speeds에서 배포된 작업과 작업속도를 제거한다.
5. [2] ~ [4]를 반복한다.
✨ 성공 코드
import java.util.ArrayList;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
// 배포 회차별 배포 사이즈를 담을 리스트 선언한다.
ArrayList<Integer> answerList = new ArrayList<>();
// 배포가 된 작업은 progresses에서 지워가면서 모두 배포될 때 까지 반복한다.
while (progresses.length > 0) {
// 작업 속도에 따른 작업 진행도 갱신
for (int i = 0; i < progresses.length; i++) {
progresses[i] += speeds[i];
}
// 배포 가능한 작업 개수를 카운트할 변수 선언한다.
int cnt = 0;
// 배포가능한 작업을 카운트한다.
for (int progress : progresses) {
if (progress >= 100) {
cnt++;
} else {
break;
}
}
// 배포가능한 작업이 있다면 배포처리를 한다.
if (cnt > 0) {
// 배포 후 남은 작업들만 추려서 진행도 리스트와 작업속도 리스트를 갱신한다.
int[] newProgresses = new int[progresses.length - cnt];
int[] newSpeeds = new int[speeds.length - cnt];
for (int i = 0; i < progresses.length - cnt; i++) {
newProgresses[i] += progresses[i + cnt];
newSpeeds[i] += speeds[i + cnt];
}
progresses = newProgresses;
speeds = newSpeeds;
// 배포 가능한 작업 개수를 응답 리스트에 입력한다.
answerList.add(cnt);
}
}
return answerList.stream().mapToInt(integer -> integer).toArray();
}
}
'스터디 > 99클럽 코테 스터디 TIL' 카테고리의 다른 글
99클럽 코테 스터디 10일차 TIL 이중우선순위큐 (0) | 2024.08.01 |
---|---|
99클럽 코테 스터디 9일차 TIL 더 맵게 (0) | 2024.07.31 |
99클럽 코테 스터디 7일차 TIL 하노이의 탑 (0) | 2024.07.29 |
99클럽 코테 스터디 6일차 TIL 의상 (0) | 2024.07.28 |
99클럽 코테 스터디 5일차 TIL 전화번호 목록 (0) | 2024.07.26 |