문제
기능개발
https://programmers.co.kr/learn/courses/30/lessons/42586?language=java
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한 사항
- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
생각해보기
- 100% 이상만 되면 배포가 될 수 있으니 작업이 완료까지 남은 일수를 구한 값을 사용!
- 첫 번째보다 두 번째가 개발은 먼저 될 수 있으나, 배포는 순서대로!!
Code
먼저 주어진 배열로 작업 완료 시간을 queue에다가 넣어둔다.
- 남은 작업량을 작업 속도로 나눈 나머지가 0이면 나눈 몫으로 넣는다.
- 남은 작업량을 작업 속도로 나눈 나머지가 0이 아니라면 나눈 몫 + 1로 넣는다.
갯수를 카운트랑 cnt변수와 시작할 때 임시값으로 tmp에 queue.peek으로 설정해둔다.
queue를 하나씩 꺼낸 값인 cur과 tmp를 비교하면서 cur이 더 클 경우 지금까지 카운트해준 cnt를 list에 넣어주고 tmp값은 cur로 변경하며 cnt = 1(바뀐 tmp값 카운트)로 설정한다.
queue가 비었다면 마지막으로 cnt값을 list에 넣어준다.
마지막으로 list에 있는 갯수들을 int 배열로 변환한다.
Java
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> queue = new LinkedList<>(); // 남은 작업 일수 담을 queue
List<Integer> list = new ArrayList<>(); // 배포될 갯수 리스트
for (int i = 0; i < progresses.length; i++) {
if ((100 - progresses[i]) % speeds[i] == 0) {
// 100%가 딱 맞아 떨어질 경우
queue.offer((100 - progresses[i]) / speeds[i]);
} else { // 그 외
queue.offer((100 - progresses[i]) / speeds[i] + 1);
}
}
int cnt = 0; // 개수를 셀 변수
int tmp = queue.peek(); // 임시 값
while (!queue.isEmpty()) {
int cur = queue.poll();
if (tmp < cur) { // 임시 값보다 방금 꺼낸 queue값이 더 클 경우
list.add(cnt);
tmp = cur;
cnt = 1;
} else {
cnt++;
}
if (queue.isEmpty()) { // queue가 비었을 경우
list.add(cnt);
break;
}
}
int[] answer = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
테스트 결과
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 모의고사 (0) | 2023.01.10 |
---|---|
[프로그래머스] k번째수 (0) | 2022.12.30 |
[프로그래머스] 더 맵게 (0) | 2022.12.29 |
[프로그래머스] 완주하지 못한 선수 (0) | 2022.10.27 |