[프로그래머스] 기능 개발 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/42586
입력 : 먼저 배포되어야하는 순서대로 작업의 진도가 적힌 정수 배열 progresses, 각 작업의 개발. 속도가 적힌 정수 배열 speeds (1 ≤ progresses.length ≤ 100, 1 ≤ speeds.length ≤ 100)
출력 : 각 배포마다 배포되는 기능
O(n)
스택/큐
없음
없음
queue.poll() : 큐의 첫 번째 요소를 반환만 하고, 삭제하지 않는다.
구현
큐 풀이
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
List<Integer> result = new ArrayList<>();
Queue<Integer> daysQueue = new LinkedList<>();
for (int i = 0; i < progresses.length; i++) {
int days = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]);
daysQueue.add(days);
}
while (!daysQueue.isEmpty()) {
int currentDay = daysQueue.poll();
int count = 1;
while (!daysQueue.isEmpty() && daysQueue.peek() <= currentDay) {
count++;
daysQueue.poll();
}
result.add(count);
}
return result.stream().mapToInt(i -> i).toArray();
}
}
스택 풀이
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Stack<Integer> stack = new Stack<>();
List<Integer> result = new ArrayList<>();
for (int i = progresses.length - 1; i >= 0; i--) {
int days = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]);
stack.push(days);
}
while (!stack.isEmpty()) {
int currentDay = stack.pop();
int count = 1;
while (!stack.isEmpty() && stack.peek() <= currentDay) {
count++;
stack.pop();
}
result.add(count);
}
return result.stream().mapToInt(i -> i).toArray();
}
}