문제 출처 - Programmers
문제는 여기
[풀이]
1. 업무가 끝나기까지 얼마가 걸리는지 구해준다.
2. 현재 큐가 비어있지 않고, 큐의 peek()과 현재 업무가 끝나는 데 걸리는 시간을 비교한다.
3. 시간보다 적으면 해당 업무가 끝나기 전에 현재 업무가 끝나는 것이므로 큐에 담아준다.
4. 시간보다 많으면 이전까지 큐에 담긴 수가 업무를 처리할 수 있는 수가 되고, 이를 list에 담아준다.
5. 모든 업무를 마칠 때까지 반복한다.
6. 리스트에 담긴 값들을 배열에 담아주고 이를 출력한다.
[접근]
[코드]
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> q = new LinkedList<>();
// 크기를 몰라서 배열말고 리스트 썼음
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < speeds.length; i++) {
double task = (100 - progresses[i]) / (double) speeds[i];
// 남은 업무량에 대한 남은 일 (올림)
int date = (int) Math.ceil(task);
// 큐에 값이 있고
// 큐 값이 남은 일 수보다 적으면 지금까지 한 일의 수를 출력해야함
if (!q.isEmpty() && (q.peek() < date)) {
list.add(q.size());
q.clear();
}
// 큐에 걸리는 일자 담기
q.offer(date);
}
list.add(q.size());
// 결과를 출력하기 위한 배열에 값 담기
int[] answer = new int[list.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = list.get(i);
}
return answer;
}
}
'문제 풀이 > Programmers' 카테고리의 다른 글
[프로그래머스] 모의고사 (JAVA) (0) | 2022.03.25 |
---|---|
[프로그래머스] 짝지어 제거하기 (JAVA) (0) | 2022.03.23 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (JAVA) (0) | 2022.03.21 |
[프로그래머스] [1차] 뉴스 클러스터링 (JAVA) (0) | 2022.03.18 |
[프로그래머스] 없는 숫자 더하기 (JAVA) (0) | 2022.03.17 |