[ Programmers ] _ 기능개발 ( java )
📚 Table of Contents
문제
문제 설명
제한사항
입출력 예
문제 풀이
문제 접근 ( 알고리즘 )
- 각 기능의 작업 일을 계산 한다.
- 남은 진도(100 - 현재 진도) % 작업 속도 == 0 인 경우
- 큐에 ( 작업일 ) 추가
- 큐에 ( 작업일 ) 추가
- 남은 진도(100 - 현재 진도) % 작업 속도 == 0이 아닌 경우
- 큐에 ( 작업일 + 1 ) 추가
- 큐에 ( 작업일 + 1 ) 추가
- 남은 진도(100 - 현재 진도) % 작업 속도 == 0 인 경우
- 1번 째 기능의 작업 일을 확인한다.
q.pool( )
- 큐가 빌 때까지 반복, n 번 째 기능의 작업 일을 확인한다.
q.peek( )
- 1번째 기능의 작업일 보다 작거나 같은 경우
- 1번째 기능의 작업 일과 같이 완료된다. => 같은 날 작업이 완료된다.
- cnt 증가
cnt++
- 다음 기능 확인
q.pool( )
- 1번째 기능의 작업일 보다 큰 경우
- 결과 배열에 cnt 추가 후 다음 기능의 작업일 확인
- 1번째 기능의 작업일 보다 작거나 같은 경우
예시
progresses = [93 , 30, 55]
speeds = [1, 30, 5]
진행 일 계산
// 남은 진도(100 - 현재 진도) % 작업 속도 == 0 인 경우1번째 기능 작업 진행일 : (100 - 93 ) / 1 = 7
// 남은 진도(100 - 현재 진도) % 작업 속도 == 0이 아닌 경우
2번째 기능 작업 진행일 : (100 - 30 ) / 30 +1 = 3
3번째 기능 작업 진행일 : (100 - 55 ) / 5 = 45 / 5 = 91번째 기능 7일에 완료
2번째 기능 3일에 완료
먼저 완료가 되어도 1번째 기능이 완료되야 완료 => 7일에 완료
3번째 기능 9일에 완료7일에 2개 완료 9일에 1개 완료 => [2, 1]
풀이
Queue 사용
import java.util.*;
public class Solution {
public int[] solution(int[] progresses, int[] speeds) {
// 결과를 담을 배열 선언
ArrayList<Integer> list = new ArrayList<>();
// 작업일를 담을 큐 선언
Queue<Integer> q = new LinkedList<>();
// 각 progresses의 최소일수 계산
// progresses 크기 만큼 반복
for (int i = 0; i < progresses.length; i++) {
// 남은 진도 % 작업 속도가 0으로 떨어지는 경우
if (((100 - progresses[i]) % speeds[i] == 0)) {
q.add((100 - progresses[i]) / speeds[i]);
} else {
// 남은 진도 % 작업 속도가 0으로 떨어진지 않으면 1일 추가
q.add((100 - progresses[i]) / speeds[i] + 1);
}
}
// 1번째 기능 완료일을 담은 변수 (= 가장 긴 완료일)
int x = q.poll();
// 같은 완료일을 가진 기능의 개수 체크하는 변수
int cnt = 1;
// 큐가 빌 때까지 반복
while (!q.isEmpty()) {
// n번째 기능 완료일이 1번째 기능 완료일 보다 작거나 같은 경우
if (x >= q.peek()) {
// 같은 일에 cnt개의 기능이 배포가 가능하다.
cnt++;
q.poll();
} else {
// n번째 기능 완료일이 1번째 기능 완료일 보다 큰 경우
// 출력 배열에 cnt 추가
list.add(cnt);
// cnt를 다시 1로 초기화
cnt = 1;
// 가장 긴 완료일 변경
x = q.poll();
}
}
// 마지막 cnt도 추가
list.add(cnt);
// 결과 배열로 출력
return list.stream().mapToInt(i->i).toArray();
}
}
'Coding > Programers' 카테고리의 다른 글
[ Programmers ] _ 짝수는 싫어요 ( java ) (0) | 2023.12.18 |
---|---|
[ Programmers ] _ 프로세스 ( java ) (0) | 2023.12.16 |
[ Programmers ] _ 의상 ( java ) (0) | 2023.12.14 |
[ Programmers ] _ 나누어 떨어지는 숫자 배열 ( java ) (0) | 2023.12.13 |
[ Programmers ] _ 같은 숫자는 싫어( java ) (0) | 2023.12.12 |