👨🏫ps/leetcode
[leetcode] 198. House Robber [kotlin]
peacekim
2025. 1. 13. 21:52
반응형
문제분석
1. dp 문제이다.
2. nums input 으로 각 집에있는 돈 양이 들어온다.
3. nums array에 연속된 인덱스는 인접한 집으로 판단한다.
4. 인접한 집을 털 수 없다.
문제해결
1. 도둑이 선택할 수 있는 방법은 두가지이다. 현재 집을 털거나 털지 않거나이다.
2. 현재 집을 턴다면 바로 전 집을 털 수 없기 때문에, 전 집을 털었을 때의 최대 돈과 전전집을 털고 현재 집을 털었을 때, 최대 돈을 비교하여 현재 집 기준으로 최대 돈을 구한다.
3. 현재가 i라고 한다면 [i의 최대돈] = max([i-1 까지의 돈], [i-2 까지의 돈] + [i를 털었을때 돈] 이다.
class Solution {
fun rob(nums: IntArray): Int {
if (nums.size == 1) return nums[0]
val dp = IntArray(nums.size) { 0 }
dp[0] = nums[0]
dp[1] = maxOf(nums[1],nums[0])
for (i in 2..nums.size-1) {
dp[i] = maxOf(dp[i-1], dp[i-2] + nums[i])
}
return dp[nums.size-1]
}
}
반응형