728x90
반응형
728x90
[NeetCode-LeetCode] House Robber - Medium
접근
- dp
풀이
집을 약탈하여 최대한 많은 돈을 모으는 문제로 배열엔 집에서 약탈할 수 있는 돈의 금액이 들어있다. 조건으로 집을 연속하여 터는 경우 경보가 울려 경찰이 오기 때문에 연속되게 약탈을 할 수는 없다.
dp를 사용하면 해결되는 문제이다.
public int rob(int[] nums) {
if (nums.length == 0) {
return 0;
}
if (nums.length == 1) {
return nums[0];
}
int[] dp = new int[nums.length];
dp[0] = nums[0];
dp[1] = Math.max(nums[0], nums[1]);
for (int i = 2; i < nums.length; i++) {
dp[i] = Math.max(nums[i] + dp[i - 2], dp[i - 1]);
}
return dp[nums.length - 1];
}
집의 개수가 0개이거나 1개인 경우 처리를 해주고 dp를 통해 최댓값을 구해줬다. 현재 집을 포함할지 안 할지에 따라 현재 집까지의 최댓값이 구해진다. 현재 집을 포함하는 경우 연속된 집을 약탈할 수 없기 때문에 2칸 전의 집까지의 최댓값을 더해주고 현재 집을 포함하지 않는 경우 이전 집까지의 최댓값을 사용하는데 둘 중 큰 값으로 현재 집까지의 최댓값을 갱신한다.
전체 코드
class Solution {
public int rob(int[] nums) {
if (nums.length == 0) {
return 0;
}
if (nums.length == 1) {
return nums[0];
}
int[] dp = new int[nums.length];
dp[0] = nums[0];
dp[1] = Math.max(nums[0], nums[1]);
for (int i = 2; i < nums.length; i++) {
dp[i] = Math.max(nums[i] + dp[i - 2], dp[i - 1]);
}
return dp[nums.length - 1];
}
}
728x90
'알고리즘 > 코딩테스트-NeetCode' 카테고리의 다른 글
[NeetCode-LeetCode] Palindromic Substrings JAVA (0) | 2025.01.08 |
---|---|
[NeetCode-LeetCode] House Robber II JAVA (0) | 2025.01.07 |
[NeetCode-LeetCode] Pacific Atlantic Water Flow JAVA (1) | 2025.01.03 |
[NeetCode-LeetCode] Design Add and Search Words Data Structure JAVA (0) | 2025.01.02 |
[NeetCode-LeetCode] Subtree of Another Tree JAVA (0) | 2025.01.01 |