반응형
○
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
반응형