반응형
https://programmers.co.kr/learn/courses/30/lessons/42586
import java.util.ArrayList;
import java.util.Queue;
import java.util.stream.IntStream;
import java.util.concurrent.ConcurrentLinkedQueue;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> deployQueue = new ConcurrentLinkedQueue<>();
for (int i = 0; i < progresses.length; i++) {
deployQueue.add(getWorkingDay(progresses[i], speeds[i]));
}
ArrayList<Integer> answerList = new ArrayList<>();
int first = deployQueue.poll();
int count = 1;
while (!deployQueue.isEmpty()) {
int next = deployQueue.poll();
if (first >= next) {
count++;
} else {
answerList.add(count);
count = 1;
first = next;
}
}
answerList.add(count);
return answerList.stream().flatMapToInt(IntStream::of).toArray();
}
public int getWorkingDay(int progress, int speed) {
int quotient = (100 - progress) / speed;
int remain = (100 - progress) % speed;
if (remain == 0) {
return quotient;
}
return quotient + 1;
}
}
풀이 아이디어는 간단했다. 배포의 순서는 반드시 보장되어야 한다는 조건이 있다. ex) 앞 기능의 배포보다 뒤 기능 개발이 빨리 개발되는 경우는 존재하나 이는 앞 기능이 배포될 때 같이 배포된다. 따라서 순서를 보장하는 자료구조인 큐를 사용했고, 진척률과 작업 속도를 바탕으로 해당 기능의 구현 기간을 구한 뒤, 이 값을 바탕으로 배포일 별 기능 수를 구했다.
반응형
'Programming > Algorithm' 카테고리의 다른 글
[프로그래머스] - [큐스택] 주식 가격 문제 (0) | 2021.05.26 |
---|---|
[프로그래머스] - [큐스택] 프린터 문제 (0) | 2021.05.25 |
[30 Days of Code] 0: Hello, World (0) | 2020.10.30 |
[Mysql] 프로그래머스 - GROUP BY입양 시각 구하기(2) (0) | 2020.10.19 |
[Hackerrank] counting valleys - java (0) | 2020.09.08 |