✔ 멀리 뛰기
문제 분석하기
DP를 사용해 n번째 칸까지 이동한 횟수를
손으로 풀어보기
- 점화식의 형태와 의미를 도출
- D[i]는 i번째 칸에 도달할 수 있는 경우의 수
- 점화식을 구함
- D[0]은 0
- D[1]은 1칸 뛰는 것으로만 가능하므로 1
- D[2]는 1칸을 2번, 2칸을 1번 뛰는 것으로 가능하므로 2
- 다음 칸으로 1칸 뛸 때 D[i - 1]
- 다음 칸으로 2칸 뛸 때 D[i - 2]
- 점화식으로 D 배열을 채운 후 D[N]을 반환
슈도코드 작성하기
n(멀리뛰기에 사용될 칸의 수)
D(i번째 칸에 도달할 수 있는 경우의 수)
D[1] = 1
D[2] = 2
for(i -> 2000까지) {
D[i] = (D[i - 1] + D[i - 2]) % 1234567
}
D[n] 반환
코드 구현하기
/**
* 12914) 멀리_뛰기
*/
public class L011_12914 {
// n(멀리뛰기에 사용될 칸의 수)
public long solution(int n) {
// D(i번째 칸에 도달할 수 있는 경우의 수)
int[] D = new int[2001];
D[1] = 1;
D[2] = 2;
for (int i = 3; i < 2001; i++) {
// (이전 칸에서 1칸 뛸 때 + 이전 칸에서 2칸 뛸 때의 경우의 수) % 1234567
D[i] = (D[i - 1] + D[i - 2]) % 1234567;
}
// D[n] 반환
return D[n];
}
// 테스트 케이스
public static void main(String[] args) {
L011_12914 solution = new L011_12914();
int n = 4;
long result = solution.solution(n);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[12924] 숫자의 표현 (0) | 2024.01.07 |
---|---|
[12923] 숫자 블록 (0) | 2024.01.03 |
[12913] 땅따먹기 (0) | 2024.01.03 |
[12911] 다음 큰 숫자 (0) | 2024.01.03 |
[250137] 붕대 감기 (0) | 2024.01.02 |