반응형
문제
https://www.acmicpc.net/problem/1793
풀이
사용할 수 있는 타일이 2 * 1(가로), 2 * 1 (세로), 2 * 2 세 종류이다.
왼쪽부터 차례대록 타일을 채운다고 생각하면서 점화식을 생각해본다.
길이가 i인 타일을 채워야 하고, i-1까지 타일이 채워져 있다면 2 * 1(세로)를 사용하면 된다.
길이가 i인 타일을 채워야 하고, i-2까지 타일이 채워져 있다면 2*1(가로) 두개를 사용하는 방법과 2*2 타일을 사용하는 방법이 있다.
따라서 다음과 같은 점화식을 만들 수 있다.
a[i] = a[i-1] + a[i-2] * 2
문제에서 입력으로 가능한 수가 0도 포함되어 있어서 a[0]의 경우도 생각해야 하는데, 2*0의 직사각형은 아무것도 하지 않아도 이미 채워져 있다고 생각을 해서 1로 초기화 해준다.
코드
python
1
2
3
4
5
6
7
8
9
10
11
12
13
|
d = [0] * 251
d[0] = 1
d[1] = 1
d[2] = 3
for i in range(3, 251):
d[i] = d[i - 1] + d[i - 2] * 2
while True:
try:
n = int(input())
print(d[n])
except EOFError:
break
|
cs |
java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); BigInteger[] d = new BigInteger[251]; d[0] = new BigInteger("1"); d[1] = new BigInteger("1"); d[2] = new BigInteger("3"); for (int i=3; i<=250; i++) { d[i] = d[i-1].add(d[i-2].multiply(new BigInteger("2"))); } while (sc.hasNext()) { System.out.println(d[sc.nextInt()]); } } } | cs |
반응형
'BOJ' 카테고리의 다른 글
백준 18352 - 특정 거리의 도시 찾기 (0) | 2021.07.19 |
---|---|
백준 1439 - 뒤집기 (0) | 2021.07.18 |
백준 2805 - 나무 자르기 (0) | 2021.06.18 |
백준 1260 - DFS와 BFS (0) | 2021.06.12 |
백준 17977 - Triangulation (0) | 2020.10.08 |