그 dp의 전형적인 최대이득구하기문제
한개선택하면 양옆에 못고르니 한집건너 픽해야함
즉 현재위치에서 선택할수있는건,x[n]+dp[n-2]와 dp[n-1], dp[n-3]+x[n] 셋중 하나임
0,1,2 미리 리스트에 넣어두고 max쳐가면서 바텀업하면됨
정답
import kotlin.math.max
class Solution {
fun rob(nums: IntArray): Int {
if (nums.size<4){
if (nums.size==3) {
return max(nums[1], nums[0] + nums[2])
}else{
return nums.max()
}
}
val dpList = MutableList(nums.size) { 0 }
dpList[0]=nums[0]
dpList[1]=nums[1]
dpList[2]=nums[2]+dpList[0]
for (i in 3 until nums.size){
dpList[i]=listOf( dpList[i-2]+nums[i],dpList[i-1],dpList[i-3]+nums[i]).max()
}
return max(dpList[dpList.size-1],dpList[dpList.size-2])
}
}
'알고리즘' 카테고리의 다른 글
릿코드 1239. Maximum Length of a Concatenated String with Unique Characters 코틀린 (1) | 2024.01.24 |
---|---|
릿코드 645. Set Mismatch 코틀린 (0) | 2024.01.22 |
릿코드 931. Minimum Falling Path Sum 코틀린 (0) | 2024.01.19 |
릿코드 70. Climbing Stairs 코틀린 (0) | 2024.01.18 |
릿코드 1207. Unique Number of Occurrences 코틀린 (0) | 2024.01.17 |