문제 설명
입력&출력
문제풀이
class Solution {
public int solution(int[] money) {
int answer = 0;
//0부터 시작 맨 마지막 제외
int[] dp0 = new int[money.length-1];
//1부터 시작 맨 마지막 포함
int[] dp1 = new int[money.length];
dp0[0] = money[0];
dp0[1] = money[0];
dp1[0] = 0;
dp1[1] = money[1];
for(int i = 2 ; i < money.length-1;i++ ){
dp0[i] = Math.max(dp0[i-2]+money[i],dp0[i-1]);
}
for(int i = 2; i < money.length;i++){
dp1[i] = Math.max(dp1[i-2]+money[i],dp1[i-1]);
}
// int sum1=0;
// int sum2=0;
// for(int i = 0 ; i < money.length/2;i++){
// sum1+=money[2*i];
// sum2+=money[2*i+1];
// }
// answer = Math.max(sum1,sum2);
return Math.max(dp0[money.length-2],dp1[money.length-1]);
}
}
※ 내 생각
이 문제는 DP를 활용하는 문제입니다.
인접한 원소를 포함시키지 못하기 때문에,
맨 처음에 첫번째 원소를 선택할 것인지, 두번째 원소부터 시작할 것인지를 선택해야 합니다.
2개의 dp의 경우로 각각 for문을 돌려줍니다.
dp는 2칸 전+현재의 money와 바로 이전의 dp와 비교해서 max값을 선택하면 됩니다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 정수 삼각형(자바) / DP (0) | 2021.10.30 |
---|---|
[프로그래머스] 문자열 압축(자바) / 문자열 (0) | 2021.10.25 |
[프로그래머스] 타겟 넘버(자바) / DFS (0) | 2021.10.22 |
[프로그래머스] 다단계 칫솔 판매(자바) / 자료구조 & 구현 (0) | 2021.10.17 |
[프로그래머스] 행렬 테두리 회전하기 ( 자바) / 구현 (0) | 2021.10.16 |