-
[Java] 백준 11726 2 x n 타일링Programming/Algorithm 2021. 3. 19. 11:12
문제
2 x n 크기의 직사각형을 채우는 경우의 수를 출력한다
사용할 수 있는 타일의 크기
- 1 x 2
- 2 x 1풀이
- dp[i]는 2가지 타일을 사용해서 2 x i 직사각형을 채울 수 있는 방법의 수이다.
- 2 x i를 만들 수 있는 경우의 수는 다음의 두 경우를 더한 값이다.
- 2 x (i - 1)까지 만든 타일 + [2x1타일]
- 2 x (i - 2)까지 만든 타일 + [1x2타일+1x2타일]
- 이것을 점화식으로 나타내면, dp[i] = dp[i-1] + dp[i-2]코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class b11726__2 { static int MOD = 10_007; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); long[] dp = new long[N + 1]; System.out.println(recursion(N, dp)); } public static long recursion(int n, long[] dp) { if (dp[n] != 0) return dp[n]; if (n <= 2) return dp[n] = n; return dp[n] = (recursion(n - 1, dp) % MOD + recursion(n - 2, dp) % MOD) % MOD; } }
'Programming > Algorithm' 카테고리의 다른 글
[Java] 백준 1931 회의실 배정 (0) 2021.03.24 [Java] 백준 12852 1로 만들기 2 (0) 2021.03.24 [Java] 백준 11399 ATM (0) 2021.03.19 [Java] 백준 1149 RGB 거리 (0) 2021.03.16 [Java] 백준 10610 30 (0) 2021.03.15 댓글