Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

2244. Minimum Rounds to Complete All Tasks (모든 작업을 완료하기 위한 최소 라운드) 본문

코딩 테스트/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 해주었습니다.