🔗 문제 링크
📝 풀이 과정
각 기능은 정해진 순서대로만 배포가 가능하기 때문에 현재 기능이 완료됐다고하더라도 앞의 기능이 완료되지 않으면 배포가 불가능하다. 따라서 입력 순서대로 반환하는 Queue
를 사용하였다.
for (int i = 0; i < progresses.length; i++)
queue.add((int) (Math.ceil((100.0 - progresses[i]) / speeds[i])));
기능구현이 완료되는 시간을 구해 Queue에 순차적으로 넣기 위해 값을 계산했다. 자바에서 int간의 연산 결과는 int 이기 때문에 소수점자리까지 구하기 위해 100이 아닌 100.0을 사용했다. 만약 값이 5.5와 같이 소수점이 나오게 된다면 실제 배포일은 6일이기 때문에 Math.ceil
을 통해 올림하여 Queue에 넣어주었다.
while (!queue.isEmpty() && day >= queue.peek()) {
cnt++;
queue.poll();
}
Queue.poll()
을 통해 현재 기능이 완료되는 일자를 꺼내오고 Queue를 차례대로 보며 현재 꺼내온 날짜에 이미 구현이 완료된 기능들을 Queue에서 제거하며 개수를 증가시켜주었다. 현재 완료된 기능이 더이상 없다면 List에 개수를 추가하고 다음 기능이 완료되도록 반복문을 돌려주었다.
💻 코드
import java.util.*;
public class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < progresses.length; i++)
queue.add((int) (Math.ceil((100.0 - progresses[i]) / speeds[i])));
List<Integer> ans = new ArrayList<>();
while (!queue.isEmpty()) {
int day = queue.poll();
int cnt = 1;
while (!queue.isEmpty() && day >= queue.peek()) {
cnt++;
queue.poll();
}
ans.add(cnt);
}
return ans.stream().mapToInt(Integer::intValue).toArray();
}
}
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 프렌즈4블록 / 2018 KAKAO BLIND RECRUITMENT(1차) - JAVA (0) | 2021.01.11 |
---|---|
[프로그래머스] 뉴스 클러스터링 / 2018 KAKAO BLIND RECRUITMENT(1차) - JAVA (0) | 2021.01.11 |
[프로그래머스] 다리를 지나는 트럭 - JAVA (1) | 2021.01.03 |
[프로그래머스] 베스트앨범 - JAVA (0) | 2021.01.02 |
[프로그래머스] 전화번호 목록 - JAVA (0) | 2021.01.01 |