개발 일지
2244. Minimum Rounds to Complete All Tasks (모든 작업을 완료하기 위한 최소 라운드) 본문
코딩 테스트/LeetCode
2244. Minimum Rounds to Complete All Tasks (모든 작업을 완료하기 위한 최소 라운드)
포카리tea 2023. 1. 16. 03:190 인덱스 정수 배열 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 해주었습니다.
'코딩 테스트 > LeetCode' 카테고리의 다른 글
926. Flip String to Monotone Increasing (문자열을 뒤집어서 모노톤 증가시키기) (2) | 2023.02.06 |
---|---|
944. Delete Columns to Make Sorted (열을 삭제하여 정렬하기) (0) | 2023.01.18 |
55. Jump Game (점프 게임) (0) | 2023.01.09 |
733. Flood Fill (홍수 채우기) (0) | 2023.01.09 |
198. House Robber (집 도둑) (0) | 2022.12.23 |