01 타일은 동적 계획법으로 푸는 문제이다.
01 타일의 특이한 점은 n에 따른 증가폭이 어디서 본 것 같은 모양새로 증가한다.
N = 1일 때 1개 (1)
N = 2일 때 2개 (00, 11)
N = 3일 때 3개 (100, 001, 111)
N = 4일 때 5개 (0011, 0000, 1001, 1100, 1111 )
.....
즉, 1,2,3,5,8.... 이런 식으로 증가하는 게 피보나치 증가하는 것처럼 보인다.
이때, 점화식이 dp [n] = dp [n-1] + dp [n-2] 이므로 그대로 적용하여 풀되
46번째부터 int 범위를 벗어나므로 15746으로 나누어 나머지를 저장한다.
import java.io.*;
public class t1904 {
static final int mod = 15746;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[1000001];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
for (int i = 3; i <= n; i++) {
arr[i] = (arr[i - 1] + arr[i - 2]) % mod;
}
bw.write(arr[n - 1] + "");
br.close();
bw.flush();
bw.close();
}
}
'Programming > algorithm' 카테고리의 다른 글
백준 1932 자바 DP 풀이 (0) | 2020.07.15 |
---|---|
백준 2579 자바 풀이 (0) | 2020.07.15 |
[APIO 2010] 특공대 (Commando) 풀이 (0) | 2020.06.23 |
백준 2577 java (0) | 2020.05.28 |
2017 kakao blind test question_1 (0) | 2020.05.04 |