-
[백준 11726] 2xn 타일링 (Kotlin 풀이)자료구조 & 알고리즘/BOJ 문제풀이 2022. 1. 19. 22:29
1.문제
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
2. 입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
3. 출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
4. 포인트
-
- 점화식을 세울 수 있어야한다
- dp[ n+2 ] = (dp[ n+1 ] + dp[ n ]) / 10007
- 10007 로 나눔 다는 의미를 파악한다.
- 점화식을 세울 수 있어야한다
4. 문제 풀이
그림을 그려가며 규칙 찾아 점화식을 세울 수 있엇다. 어떤 원리인지는 파악하지 못했지만 규칙을 찾아 낼 수 있었다.
문제는 10007 로 나눈다는 의미를 파악하지 못해 조금 헤매었다.
문제에서 10007 로 나눈 값을 요했다는 것은 너무 큰 값으로 인해 오류가 날 수 있는 가능성이 있는 것을 의미한다,
처음에는 마지막 값만 나누어 주었지만 중간 값이 int 범위를 벗어나 오류가 난 것 같다.
점화식을 보면 dp 에 값을 저장 할때에도 나눗셈을 적용해주어도 결과에 영향을 주지 않는 다는 것을 알 수 있다.
import java.io.BufferedReader import java.io.InputStreamReader fun main() = with(BufferedReader(InputStreamReader(System.`in`))) { val n = readLine().toInt() if (n <= 3) { println(n) } else { val dp = IntArray(n + 1) for (i in 0..2) { dp[i] = i } if (n >= 3) { for (i in 3..n) { dp[i] = (dp[i - 1] + dp[i - 2])%10007 } } println(dp[n] ) } }
'자료구조 & 알고리즘 > BOJ 문제풀이' 카테고리의 다른 글
[ 백준 11054 ] 가장 긴 바이토닉 부분 수열 (Kotlin 풀이) (0) 2022.02.01 [ 백준 10844 ] 쉬운 계단수 (Kotlin 풀이) (0) 2022.01.22 [백준 1463] 1로 만들기(Kotlin 풀이) (0) 2022.01.19 [백준 10757] 큰 수 A+B(Kotlin 풀이) (0) 2022.01.11 [백준 1406] 에디터 (Kotlin 풀이) (0) 2022.01.11 -