적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

카테고리 없음

[Swift 알고리즘] LeetCode 2600. K Items With the Maximum Sum

hongssup_ 2023. 5. 14. 23:59
반응형

Greedy | Easy

LeetCode 2600. K Items With the Maximum Sum

 

구리다 구려,,,

처음에는 단순하게 while 반복문 돌며 하나씩 빼고 더하는 방법을 생각했다. 

func kItemsWithMaximumSum(_ numOnes: Int, _ numZeros: Int, _ numNegOnes: Int, _ k: Int) -> Int {
    var result = 0
    var numOnes = numOnes
    var numZeros = numZeros
    var k = k

    while k > 0 {
        if numOnes > 0 {
            numOnes -= 1
            result += 1
        } else if numZeros > 0 {
            numZeros -= 1
        } else {
            result -= 1
        }
        k -= 1
    }

    return result
}

이를 계산식(?) 을 이용하면 다음과 같이 구현할 수 있고,

func kItemsWithMaximumSum(_ numOnes: Int, _ numZeros: Int, _ numNegOnes: Int, _ k: Int) -> Int {
    if numOnes >= k {
        return k
    } else if numOnes + numZeros >= k {
        return numOnes
    } else {
        return numOnes - (k - numOnes - numZeros)
    }
}

이걸 더 단순화 하면 다음과 같이 one line 으로도 가능하다. 좋구만,,

func kItemsWithMaximumSum(_ numOnes: Int, _ numZeros: Int, _ numNegOnes: Int, _ k: Int) -> Int {
    return min(k, numOnes) - max(0, k - numOnes - numZeros)
}
728x90
반응형