문제

문제 링크 : https://www.acmicpc.net/problem/11726
풀이

작성한 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] dp = new int[n+1];
dp[1] = 1;
if(n>=2) dp[2] = 2; // 만약 1이 들어온다면 배열이 터지는 거 방지
for(int i=3; i<=n; i++){
dp[i] = (dp[i-1] + dp[i-2])%10007;
}
System.out.println(dp[n]);
}
}
보완할 점 / 헷갈린 점
점화식을 도출하는 게 처음에는 쉽지 않았다.
하지만 막상 직접 손으로 도형을 그려보니까 규칙이 보이기 시작했다.
코드를 다 작성하고 나니까 n = 1 일 때 ArrayIndexOutOfBounds 가 자꾸 나서 왜 이럴까? 생각을 해보니까
그 전에 코드는 if(n>=2) 이런식으로 조건을 달지 않아서 n=1이면 배열이 Int[2]짜리가 생기는데 dp[2]를 넣을 자리가 없는거였다.
그래서 계속 터지는 거 였다.
생각보다 알고리즘 문제 푸는게 재밌는거같당
'알고리즘 > 백준' 카테고리의 다른 글
| [백준] 1260번 : DFS와 BFS - JAVA [자바] (0) | 2025.11.26 |
|---|---|
| [백준] 17478번 : 재귀함수가 뭔가요? - JAVA [자바] (1) | 2024.01.11 |
| [백준] 10845번 : 큐 - JAVA [자바] (0) | 2024.01.11 |
| [백준] 10816번 : 숫자 카드 2 - JAVA [자바] (0) | 2024.01.10 |
| [백준] 1920번 : 수 찾기 - JAVA [자바] (2) | 2024.01.09 |