알고리즘/백준
11726번 - 2×n 타일링
fleur75
2023. 6. 22. 21:07
1️⃣ DP
✏️ 풀이 과정
DFS 대신 다이나믹 프로그래밍을 이용해야 시간초과가 나지 않는 문제입니다.
기본적인 아이디어는 수열을 생각하면 됩니다. 3 이상의 n에 대해 방법의 개수를 f(n)이라고 하면
n번째가 만들어지는 경우의 수는 바로 이전에서 1개짜리 타일을 더하는 것과 두 칸 이전에서 2개짜리 타일을 더하는 것 뿐입니다. 그렇기 때문에 f(n) = f(n-1) + f(n-2)가 되고 배열을 통해서 간단하게 계산할 수 있습니다.
계산이후 n번째 인덱스를 출력하면 해결됩니다. 이 때 n=1, 2일 때 에러가 발생하지 않도록 주의해야 합니다.
💻 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] dp = new int[n+1];
dp[1] = 1;
if(n > 1) {
dp[2] = 2;
}
for(int i=3;i<=n;i++) {
dp[i] = (dp[i-1] + dp[i-2]) % 10007;
}
System.out.println(dp[n]);
br.close();
}
}