Leetcode Java Task Scheduler
업데이트:
문제
코드
class Solution {
public int leastInterval(char[] tasks, int n) {
int[] counts = new int[26];
for (int task : tasks) {
counts[task - 'A']++;
}
int max = 0;
for (int count : counts) {
max = Math.max(max, count);
}
int maxCount = 0;
for (int count : counts) {
if (count == max) {
maxCount++;
}
}
return Math.max(tasks.length, (max - 1) * (n + 1) + maxCount);
}
}
결과
설명
- tasks를 이용하여 최소 n개의 유휴 시간을 이용해 작업을 아래의 조건을 만족하는 최소 단위의 수를 구하는 문제이다.
- tasks에 존재하는 영대문자는 각자 다른 작업을 의미한다.
- 유휴 시간의 전과 후는 동일한 작업을 수행해야 한다.
- 문제 풀이에 필요한 변수를 정의한다.
- counts는 tasks 내 각 작업의 개수를 저장할 변수로, tasks를 반복하여 count의 $task - ‘A’$번째 값을 증가시킨다.
- max는 counts내 가장 큰 값을 저장할 변수로, counts를 반복하여 가장 큰 값을 max에 넣어준다.
- maxCount는 counts 내 max에 해당하는 작업의 개수를 저장할 변수로, counts를 반복하여 max와 동일한 횟수인 작업의 개수를 넣어준다.
- tasks의 길이와 $(max - 1) \times (n + 1)$의 결과에 maxCount를 더한 결과 중 큰 값을 주어진 문제의 결과로 반환한다.
- 작업을 수행하는 최소 단위의 수는 tasks의 길이가 되므로, tasks의 길이와 비교한다.
- $(max - 1) \times (n + 1) + maxCount$은 아래를 뜻한다.
- 최소 n개의 유휴 시간을 동일한 작업 사이에 넣어야 하므로, 부분 작업의 길이인 $max - 1$를 사용한다.
- 최소 n개의 유휴 시간을 사용하여 작업을 수행하므로, 부분 작업의 수인 $n + 1$을 사용한다.
- 두 경우를 곱하여 경우의 수를 구하고, 최대 작업의 수가 동일한 경우 바꿔 사용이 가능하므로 해당 개수를 더해준다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기