반응형
📖 문제
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
💡 풀이 방식
• DP
dp[ i ] : 점프해 도착한 마지막 위치 i까지 가능한 최대 점프 횟수
i보다 앞에 있는 위치(j)들 中 해당 위치에서 점프해 i번째 위치로 올 수 있는 경우 중 최대 점프 가능 횟수 계산
for(int i = 1 ; i < N ; i++) {
for(int j = 0 ; j < i ; j++) { // i보다 앞쪽에 있는 원소들 中 비교
if(dp[j] == Integer.MIN_VALUE) continue;
if(j + arr[i] >= i) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
🔺 코드
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
31
32
33
34
35
36
37
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N + 1];
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0 ; i < N ; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int[] dp = new int[N + 1]; // dp[i] : i까지 점프해 올 때 가능한 최대 점프 횟수
Arrays.fill(dp, Integer.MIN_VALUE); // dp[0]빼고 다 얘로 초기화
dp[0] = 0;
for(int i = 1 ; i < N ; i++) {
for(int j = 0 ; j < i ; j++) {
if(dp[j] == Integer.MIN_VALUE) continue; // 해당 위치에서 이동할 수 없다는 의미이므로 pass
if(j + arr[j] >= i) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
int answer = 0;
for(int i = 0 ; i < N ; i++) {
answer = Math.max(answer, dp[i]);
}
System.out.println(answer);
}
}
|
cs |
🧐 새로 알게 된 내용
동일한 상태임을 정의하기 위한 요소로
" 선택한 부분 수열에서 정확히 마지막 원소의 위치 vs 선택한 부분 수열의 길이 "
이렇게 2가지를 생각해보기,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
✔ 코드트리
반응형
'코테 > 코드트리' 카테고리의 다른 글
[코드트리/NOVICE MID] 숫자가 더 큰 인접한 곳으로 이동 (JAVA) (0) | 2024.01.27 |
---|---|
[코드트리/INTERMEDIATE LOW] 아름다운 수 (JAVA) (0) | 2024.01.27 |
[코드트리/INTERMEDIATE LOW] 최대 감소 부분 수열 (JAVA) (0) | 2024.01.21 |
[코드트리/INTERMEDIATE LOW] 정수 사각형 최장 증가 수열 (JAVA) (0) | 2024.01.16 |
[코드트리/INTERMEDIATE LOW] 서로 다른 BST 개수 세기 (JAVA) (0) | 2024.01.16 |