문제
https://programmers.co.kr/learn/courses/30/lessons/42586?language=java
풀이
가장 앞에 들어있는 요소를 이용해야하므로, 큐를 이용해 접근해야한다.
- ((100 - 진행량) / 작업속도)의 올림 값(남은일)을 구한다.
- 큐가 비어있지 않고, 큐의 가장 앞의 값보다 방금 구한 값이 더 클 경우!
- 큐의 길이를 답변 리스트에 기록한다.
- 큐를 비운다.
- 이후 큐에 다시 삽입한다.
- 반복문이 끝나면 마지막으로 큐의 길이를 답변 리스트에 기록한다.
- 답변 리스트를 int형 배열로 변환해서 반환한다.
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> queue = new LinkedList<>();
List<Integer> alist = new ArrayList<>();
for(int i = 0; i < progresses.length; i++){
// 남은 작업일 수 구하기
int devDays = (int)Math.ceil((100-progresses[i])/(double)speeds[i]);
// 큐가 비어있지 않고, 큐의 가장 앞의 작업일이 현재 구한 작업일보다 작을 경우!
if(!queue.isEmpty() && queue.peek() < devDays){
alist.add(queue.size()); // 큐 길이 저장.
queue.clear(); // 큐 비우기.
}
// 큐에 현재 구한 작업일 삽입.
queue.add(devDays);
}
// 마지막 큐의 길이 저장.
alist.add(queue.size());
// 정답 리스트 int형 배열로 변환
int[] answer = new int[alist.size()];
int size = 0;
for(int a : alist) answer[size++] = a;
return answer;
}
}
댓글남기기