티스토리 뷰
- 런타임 오류
런타임 오류가 계속 나서 보니 if문으로 조건을 정해주지 않아서 오류가 났다.
if문으로 n >= 2의 조건으로 구별해 주지 않을 경우 dp[2] 에서 아웃오브바운드 에러가 난다.
당연한게 dp = new int[n+1]로 인덱스가 0, 1인 배열로 만들었는데 인덱스가 2인 곳에 값을 저장하겠다고 하니 이러한 에러가 날 수 밖에 없다.
- 배열 초기화
이 문제에서 기억해야 할 것은 배열을 new int[]로 초기화 해주면 인덱스마다 값을 넣지 않아도 0으로 초기화 할 수 있다는 것이다. 이게 항상 헷갈려서 3개가 연속되지 않도록 하는 조건이 걸리면 null이 뜰까봐 i인덱스 전까지는 모두 손수 0으로 세팅해주었던 것 같다.
아래 코드에서도 dp[3]의 경우를 지정해줄게 아니라 for문에 합쳐서 해도 dp[0]이 0으로 초기화 되어있기 때문에 따로 지정해 줄 필요가 없다.
- max값
지금생각해보면 당연한 것인데 인덱스 값이 증가갈수록 dp의 실질적인 값도 증가한다.
public class Main {
static int dp[], arr[];
static int max;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
dp = new int[n+1];
arr = new int[n+1];
for(int i = 1; i <= n; i++) {
arr[i] = sc.nextInt();
}
sc.close();
dp[1] = arr[1];
if (n >= 2)
dp[2] = dp[1] + arr[2];
for(int i = 3; i <= n; i++) {
dp[i] = Math.max(dp[i-3]+arr[i-1]+arr[i], dp[i-2]+arr[i]);
}
System.out.println(dp[n]);
}
}
'algorithm' 카테고리의 다른 글
[DP] 2133 3*n 타일링문제 (0) | 2020.05.01 |
---|---|
[dp] 1699 (0) | 2020.04.28 |
[DP] 2156 (0) | 2020.04.23 |
[DP] 9465, 2156 (0) | 2020.04.22 |
[DP] 11057 (0) | 2020.04.20 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 재귀함수
- 인접행렬
- stackframe
- 입출력장치
- 최단경로
- dfs
- 알고리즘
- 소프트웨어
- Stack
- server side rendering
- 자료구조
- 클래스
- 구조체
- 스텍
- C++
- 운영체제
- 세마포어
- 이진탐색
- Java
- C
- 동적프로그래밍
- 퀵정렬
- BFS
- 인접리스트
- react
- 병행프로세스
- 배열
- client side rendering
- javascript
- 교착상태
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함