코딩 테스트/LeetCode
2244. Minimum Rounds to Complete All Tasks (모든 작업을 완료하기 위한 최소 라운드)
포카리tea
2023. 1. 16. 03:19
0 인덱스 정수 배열 tasks가 주어집니다. 여기서 tasks[i]는 작업의 난이도를 나타냅니다. 각 라운드에서 동일한 난이도의 작업을 2개 또는 3개 완료할 수 있습니다.
모든 작업을 완료하는 데 필요한 최소 라운드를 반환하거나 모든 작업을 완료할 수 없는 경우 -1을 반환합니다.
예시 1:
입력: tasks = [2, 2, 3, 3, 2, 4, 4, 4, 4, 4]
출력: 4
설명: 모든 작업을 완료하기 위해 가능한 계획은 다음과 같습니다:
- 첫 번째 라운드에서는 난이도가 2인 작업 3개를 완료합니다.
- 두 번째 라운드에서는 난이도가 3인 작업 2개를 완료합니다.
- 세 번째 라운드에서는 난이도가 4인 작업 3개를 완료합니다.
- 네 번째 라운드에서는 난이도가 4인 작업 2개를 완료합니다.
모든 작업은 4라운드 미만으로 완료할 수 없으므로 답은 4입니다.
예시 2:
입력: tasks = [2, 3, 3]
출력: -1
설명: 난이도가 2인 작업 1개뿐이지만, 각 라운드에서는 같은 난이도의 과제를 2~3개만 완료할 수 있습니다.
따라서 모든 작업을 완료할 수 없으며 답은 -1입니다.
조건:
- 1 <= tasks.length <= 10^5
- 1 <= tasks[i] <= 10^9
정답:
public class Solution {
public int MinimumRounds(int[] tasks) {
int overlapCount = 0;
int count = 0;
int memory = tasks[0];
Array.Sort(tasks);
for (int i = 0; i < tasks.Length; i++)
{
if (memory == tasks[i])
{
overlapCount += 1;
}
else
{
if (overlapCount == 1)
{
return -1;
}
if (overlapCount % 3 == 0)
{
count += overlapCount / 3;
}
else
{
count += (overlapCount / 3) + 1;
}
memory = tasks[i];
overlapCount = 1;
}
}
if (overlapCount == 1)
{
return -1;
}
if (overlapCount % 3 == 0)
{
count += overlapCount / 3;
}
else
{
count += (overlapCount / 3) + 1;
}
return count;
}
}
해설:
정렬해둔 후 memory에 처음 값을 기록하여 같은 값의 갯수를 확인할 수 있도록 해준 후 같은 값 갯수가 1일 경우엔 -1을 return 해주었고 아닌 경우에는 갯수 / 3 + 1로 실행해야하는 횟수를 알 수 있으므로 반복하고 마지막 for문을 나간 후까지 값 확인 후에 횟수를 return 해주었습니다.