Baekjoon Online Judge - 11727
Review
- 백준 11726번 문제를 조금만 바꾸면 된다.
- 2x2 타일이 추가된 것이므로, 그 말인 즉슨 n-2인 경우가 2배가 된다는 것이다.
- 점화식은
A[n] = A[n-1] + A[n-2] * 2
- 참고로 memo[2]일 경우의 값을 3으로 바꿔주어야 한다. 직사각형이 2x2 크기인 경우의 경우의 수가 3이기 때문.
Code 1 (JAVA)
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
| import java.io.*;
public class Main {
static long[] memo;
public static long tile(int n) { if(n == 1) { memo[1] = 1; return memo[1]; } else if(n == 2) { memo[2] = 3; return memo[2]; } else if(memo[n] != 0) { return memo[n] %= 10007; } else { memo[n] = tile(n - 1) + tile(n - 2) * 2; return memo[n] %= 10007; } }
public static void main(String args[]) throws IOException{ BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); int input = Integer.parseInt(bf.readLine()); memo = new long[input + 1]; System.out.println(tile(input)); } }
|
Code 2 (JAVA)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import java.io.*;
public class Main {
public static void main(String args[]) throws IOException{ BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); int input = Integer.parseInt(bf.readLine()); long[] memo;
memo = new long[1001];
memo[1] = 1; memo[2] = 3;
for(int i = 3; i <= input; i++) { memo[i] = (memo[i-1] + memo[i-2] * 2) % 10007; }
System.out.println(memo[input]); } }
|