‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀
문제 👉 <코딩테스트 연습 - 기능개발 | 프로그래머스>
1. 문제
- 배포 순서에대로 작업의 진도 (progresses)와 작업의 속도 (speeds)를 통해 작업이 완료되었을 때 몇개의 작업이 배포되는지 return 한다.
- 뒤에 있는 작업이 먼저 완료되면 앞의 작업이 완료될 때 까지 기다렸다가 같이 배포된다.
- 배포는 하루에 1번 가능하다.
2. 풀이
Queue
를 이용한 문제 풀이
- 입력 순서대로 반환하면 되기 때문에 작업의 완료 시간을
Queue
로 나타낸다.
- progresses 와 speeds 를 통해 작업이 완료되는 시간을 계산하고 Queue에 넣는다.
- 작업이 완료되는 시간을 계산할 때 소수점을 통해 반올림을 해야하므로 100.0 을 통해 타입은 int 가 아닌 double 을 사용한다.
- Queue에서 앞의 작업 완료 시간과 뒤에 있는 작업 완료 시간을 비교하여 배포될 작업의 계수를 구한다.
3. 코드
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> queue = new LinkedList<>();
for (int i=0; i<progresses.length; i++) {
// 소수점 계산을 위해 100.0 (double) 사용
queue.add((int)Math.ceil((100.0 - progresses[i]) / speeds[i]));
}
List<Integer> answer = new ArrayList<>();
while (!queue.isEmpty()) {
int day = queue.poll();
int cnt = 1;
while (!queue.isEmpty() && day >= queue.peek()) {
queue.poll();
cnt++;
}
answer.add(cnt);
}
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 프린터 [JAVA(자바)] (0) | 2021.11.25 |
---|---|
[프로그래머스] 주식가격 [JAVA(자바)] (0) | 2021.11.25 |
[프로그래머스] 다리를 지나는 트럭 [JAVA(자바)] (0) | 2021.11.25 |
댓글