11726번: 2xn 타일링백준/문제2023. 8. 14. 12:44
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/11726
언어 : Kotlin
문제 설명 :
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
- 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
- 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
2 | 2 |
9 | 55 |
풀이 :
import java.io.*
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val n = br.readLine().toInt()
val arr = IntArray(n + 1) { 1 }
(2 .. n).forEach { arr[it] = (arr[it - 2] + arr[it - 1]) % 10007 }
bw.write("${arr[n]}")
bw.flush()
bw.close()
}
경우의 수를 세보자 1x2를 1, 2x1을 2로 표현하겠다. (2x1은 한칸에 2개가 쌓이니까)
2x1 = 1
2
2x2 = 2
11
2
2x3 = 3
111
12
21
2x4 = 5
1111
112
121
211
22
2x5 = 8
11111
11 2 1
11 1 2
1 2 11
2 1 11
122
212
221
2x6 = 13
111111
11112
11121
11211
12111
21111
1122
1212
2112
1221
2211
2121
222
...
2x9 = 55
여기서 각 2xn 마다의 차이를 나열해보면 다음과 같이 나온다.
1 1 2 3 5 ...
즉, 피보나치 수열이다.
'백준 > 문제' 카테고리의 다른 글
2630번: 색종이 만들기 (0) | 2023.08.14 |
---|---|
1927번: 최소 힙 (0) | 2023.08.14 |
17626번: Four Squares (0) | 2023.08.11 |
11659번: 구간 합 구하기 4 (0) | 2023.08.11 |
9461번: 파도반 수열 (0) | 2023.08.10 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!