Lewis's Tech Keep
[프로그래머스] 도둑질 본문
- dp 컨셉을 좀 더 자세히 파고 들어야 했다.
- 첫 차례에 시작한 경우 & 첫 차례에는 시작하지 않고 두 번째부터 시작한 경우의 최대값을 구해야 했다.
- 세 번째부터는 첫 차례의 값을 가지고 + 세 번째 값을 더 하는 것이 당연히 더 크거나 같다 (모든 수가 0이상이므로)
- 네 번째부터는 두 번째부터의 값을 가지고 + 네 번째 값 더하는 것이 당연히 더 크거나 같다 (모든 수가 0이상이므로)
- 따라서 두 가지 경우에 대해서만 계산해서 최대값을 구해주면 되는 문제였다.
더보기
class Solution {
public int solution(int[] money) {
// bottom-up
// 0번째 최대 비용 계산 -> 1번째 최대비용 계산
// 0번째 부터 계산
int value1 = money[0];
int value2 = money[0];
for(int i=2; i< money.length-1; i++ ) {
int temp1 = value1 + money[i];
int temp2 = value2;
if(temp1 > temp2) {
value2 = temp1;
value1 = temp2;
} else {
value1 = temp2;
value2 = temp2;
}
}
int answer1 = value2;
// 0번째 최대 비용 계산 -> 1번째 최대비용 계산
// 0번째 스킵한 계산
value1 = 0;
value2 = money[1];
for(int i=2; i< money.length; i++ ) {
int temp1 = value1 + money[i];
int temp2 = value2;
if(temp1 > temp2) {
value2 = temp1;
value1 = temp2;
} else {
value1 = temp2;
value2 = temp2;
}
}
int answer2 = value2;
return answer1 > answer2 ? answer1 : answer2;
}
}
'Java > 알고리즘' 카테고리의 다른 글
[백준] 1로 만들기 (0) | 2021.03.04 |
---|---|
[프로그래머스] 정수 삼각형 (0) | 2021.02.25 |
[프로그래머스] 2xn 타일링 (0) | 2021.02.23 |
[프로그래머스] 게임 맵 최단거리 (0) | 2021.02.18 |
[프로그래머스] 단어 변환 (0) | 2021.02.18 |
Comments