문제
https://school.programmers.co.kr/learn/courses/30/lessons/42586
풀이
간단한 구현 문제 라고 생각했으나, 뇌가 굳었는지 배포 그룹을 묶는 부분에서 좀 막혔다.
풀이
1. 작업별로 처리일수를 계산한다(이건 쉬움)
2. 처리일수 배열을 순회하면서 앞의 처리일수가 뒤의 처리일수보다 높으면, 함께 배포해야 하므로, count하는 방식으로 계산.
import java.util.*;
class Solution {
public int[] arrayListToArray(ArrayList<Integer> input) {
int[] result = new int[input.size()];
for(int i = 0; i < input.size(); ++i) {
result[i] = input.get(i);
}
return result;
}
public int[] solution(int[] progresses, int[] speeds) {
int[] answer;
ArrayList<Integer> processDays = new ArrayList<Integer>();
//처리일수 계산
for(int i = 0; i < progresses.length; ++i) {
int processDay = (100 - progresses[i]) / speeds[i];
if ((100 - progresses[i]) % speeds[i] > 0) processDay++;
processDays.add(processDay);
}
//정답 계산
ArrayList<Integer> answerArrayList = new ArrayList<Integer>();
//앞의 처리시간이 뒤보다 크거나 같을 경우, 함께 배포한다.
int j = 0;
int cnt = 0;
for(int i = 0; i < processDays.size(); ++i) {
cnt = 1;
for(j = i + 1; j < processDays.size(); ++j) {
if(processDays.get(i) < processDays.get(j)) {
i = j - 1;
break;
}
cnt++;
}
answerArrayList.add(cnt);
if(j == processDays.size()) break;
}
answer = arrayListToArray(answerArrayList);
return answer;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
프로그래머스 12906번 같은 숫자는 싫어 (0) | 2022.08.22 |
---|---|
프로그래머스 42579번 베스트앨범 (0) | 2022.07.31 |
프로그래머스 42578번 위장 (0) | 2022.07.26 |
프로그래머스 42577번 전화번호 목록 (0) | 2022.07.18 |
프로그래머스 42576번 완주하지 못한 선수 (0) | 2022.07.16 |