알고리즘/프로그래머스
[프로그래머스] 기능개발_JAVA
jimkwon
2022. 2. 11. 13:42
반응형
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42586
뒤의 작업이 먼저 끝나더라도, 앞 작업이 끝나지 않으면 배포가 불가능하다는 성질 -> 큐
선입 선출의 성질을 가진 큐를 이용하여 풀기에 용이한 문제이다.
매일 각 progresses에 담긴 작업에 speeds만큼 작업량을 올려준다.
que의 맨 앞에 있는 작업량이 100이상일 때, 해당 작업을 포함하여 연달아 작업량을 완수한게 있다면 poll로 뽑아낸다.
ex) 7일 째 작업량은 [100, 240, 90] 이므로 1번 째, 두번 째 배포한 후, 2일 후 3번 째 작업을 배포한다.
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int complete;
int days = 1;
ArrayList<Integer> array = new ArrayList<>();
Queue<Integer> que = new LinkedList<>();
Queue<Integer> spd = new LinkedList<>();
for (int i = 0; i < progresses.length; i++)
que.add(progresses[i]);
for (int i = 0; i < speeds.length; i++)
spd.add(speeds[i]);
while (!que.isEmpty()) {
complete = 0;
if (que.peek() + spd.peek() * days >= 100) {
while(!que.isEmpty() && que.peek() + spd.peek() * days >= 100) {
complete++;
que.poll();
spd.poll();
}
array.add(complete);
}
days++;
}
int[] answer = new int[array.size()];
for (int i = 0; i < array.size(); i++) {
answer[i] = array.get(i);
}
return answer;
}
}
스택, 큐 문제는 1, 2단계에 기본으로 많이 나오는 문제이니 잘 숙지해두도록 하자.
어려운 문제를 푸는 것도 중요하지만, 내가 풀 수 있는 기본적 난이도의 문제를 다 맞추는것도 중요하니까!