처음으로 큐를 사용한 문제를 풀어보았다. 큐의 개념은 알고 있었지만 실제로 어떻게 사용하는지 잘 몰랐었는데
실제로 문제를 풀다보니 대략 어떤 느낌인지 알 것 같다.
처음 풀 때는 기능 개발이 완료되어도 배포는 그 다음날에 한다는 조건을 잊고 올림 계산을 하지 않았다. 테스트 케이스에서 통과를 못했는데 한참 고민하다가 해결했다.
최종 코드
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
// 완료 일자를 계산하기 위해 큐 생성
Queue<Integer> day = new LinkedList<Integer>();
for(int i=0; i<progresses.length; i++) {
// 기능이 완료 되고 다음날 배포되므로 올림 계산
day.add((int) Math.ceil((100.0 - progresses[i]) / speeds[i]));
}
List<Integer> answer = new ArrayList();
while(!day.isEmpty()) {
// 큐에서 첫번째 값 꺼냄
int result = day.poll();
int count = 1;
// 앞에 있는 기능이 뒤에 있는 기능보다 시간이 같거나 오래걸린다면
while(!day.isEmpty() && result >= day.peek()) {
// 첫번째 기능이 배포 될때 뒤에 있는 기능이 같이 배포됨
count++;
day.poll();
}
answer.add(count);
}
return answer.stream().mapToInt(i -> i).toArray();
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 행렬 테두리 회전하기 (0) | 2021.10.17 |
---|---|
(Java) 프로그래머스 더 맵게 (0) | 2021.10.17 |
(Java) 프로그래머스 로또의 최고순위와 최저순위 (0) | 2021.09.08 |
(Java) 프로그래머스 체육복 (0) | 2021.09.01 |
(Java) 프로그래머스 직사각형 별 찍기 (0) | 2021.08.13 |