Daily LeetCode Challenge - 2244. Minimum Rounds to Complete All Tasks

Min Young Kim·2023년 1월 4일
0

algorithm

목록 보기
37/198

Problem From.
https://leetcode.com/problems/minimum-rounds-to-complete-all-tasks/

오늘 문제는 주어진 배열에서 일을 2개 또는 3개씩 묶어서 처리할때 나오는 최소 묶음의 수를 반환하거나 반환할 수 없을 때는 -1 을 return 하는 문제였다.

이 문제를 푸는 가장 중요한 아이디어는 2이상의 수는 무조건 2와 3으로 만들 수 있다는 것이다.
그러므로 묶었을 때 갯수가 1 인게 있으면 -1을 리턴하고,
다른 숫자에 대해서는 3으로 나눈 나머지가 0이면 몫을 반환, 그 외에는 몫 + 1 을 반환하면 되었다.

class Solution {
    fun minimumRounds(tasks: IntArray): Int {
        
        var answer = 0
        var isDivide = true
        val map = mutableMapOf<Int, Int>()
        
        tasks.forEach{ num ->
            map.put(num, map.getOrDefault(num, 0) + 1 )
        }
        
        map.forEach { key, value ->
            
            if(value == 1) {
                isDivide = false
                return@forEach
            }
            
            when(value % 3) {
                0 -> {
                    answer += value / 3
                }
                else -> {
                    answer += value / 3 + 1
                }
            }
        }
        return if(isDivide) answer else -1
    }
}

위 풀이의 시간 복잡도는 O(kn) 이 된다.

profile
길을 찾는 개발자

1개의 댓글

comment-user-thumbnail
2023년 1월 4일

이야.. 시간복잡도까지.. 내머리가 복잡하네

답글 달기