Leetcode Java House Robber II
업데이트:
문제
코드
class Solution {
public int rob(int[] nums) {
if (nums.length == 1) {
return nums[0];
} else {
return Math.max(this.getMax(nums, 0), this.getMax(nums, 1));
}
}
private int getMax(int[] nums, int start) {
int pre = 0;
int cur = 0;
for (int i = start; i < nums.length + start - 1; i++) {
int temp = cur;
cur = Math.max(pre + nums[i], cur);
pre = temp;
}
return cur;
}
}
결과
설명
- 지난번 House Robber와 유사한 문제로, 주어진 정수 배열 nums를 이용하여 인접하지 않은 값들의 합이 가장 큰 값을 찾는 문제이다.
- 단, 주어진 배열 nums의 처음 값과 마지막 값은 인접하다고 판단한다.
-
주어진 배열 nums의 길이가 1이면 값이 하나밖에 없으므로 최댓값인 nums[0]을 주어진 문제의 결과로 반환한다.
- 그 외의 경우 첫 값을 제외한 경우와, 마지막 값을 제외한 경우 중 가장 큰 값을 주어진 문제의 결과로 반환한다.
- 문제의 조건 중 처음 값과 마지막 값이 인접하다는 조건이 있으므로, 첫 값을 제외한 경우와 마지막 값을 제외한 경우의 두 경우를 확인하는 것이다.
- 이전까지 최댓값을 저장할 변수인 pre와 현재의 최댓값을 저장할 변수인 cur을 정의한다.
- start부터 $nums.length + start - 1$까지 반복하여 아래를 수행한다.
- 지역 변수인 temp를 정의하여 cur의 값을 임시 저장시킨다.
- cur에 $pre + nums[i]$와 cur의 값 중 큰 값을 넣어 인접하지 않은 값들의 최댓값을 저장시킨다.
- pre에 그 전까지 최댓값이었던 temp 값을 넣어주고 반복을 계속 수행한다.
- 반복이 완료되면 최댓값을 저장한 cur을 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기