728x90
프로그래머스 Lv.2 스택/큐
기능개발
문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한 사항
- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
나의 문제 풀이 코드 (100/100)
import java.util.*;
class Solution {
public static int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> done = new LinkedList<>();
for (int i = 0; i < progresses.length; i++) {
int task = 100 - progresses[i];
double day = ((double) task / speeds[i]);
done.add((int) Math.ceil(day));
}
List<Integer> result = new ArrayList<>();
int count = 1;
int prev = done.poll();
while (!done.isEmpty()) {
int current = done.poll();
if (prev >= current) {
count++;
} else {
result.add(count);
count = 1;
prev = current;
}
}
result.add(count);
int[] answer = new int[result.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = result.get(i);
}
return answer;
}
}
문제 풀이 코멘트
처음에 for문만을 사용하여 문제를 풀었는데 뒤늦게서야 큐를 사용해야한다는 것을 알았고 그에 맞게 구현한 코드를 조금씩 수정했다. for문을 사용하여 문제를 풀면서 구현과정을 생각해두었더니 큐로 코드를 수정하는 것에는 크게 어려움이 없었다.
큐의 활용 예시는 다음과 같다.
- 우선순위가 같은 작업 예약 (프린터의 인쇄 대기열)
- 은행 업무
- 콜센터 고객 대기시간
- 프로세스 관리
- 너비 우선 탐색 구현 (BFS)
- 캐시(Cache) 구현
다음부턴 빨리 큐를 적용할 수 있도록해야겠다.
728x90
'공log > [P&B]' 카테고리의 다른 글
[P&B] #20 PreCodingTest (0) | 2023.08.07 |
---|---|
[P&B] #19 PreCodingTest (0) | 2023.08.06 |
[P&B] #17 PreCodingTest (0) | 2023.08.04 |
[P&B] #16 PreCodingTest (0) | 2023.08.03 |
[P&B] #15 PreCodingTest (0) | 2023.08.03 |