[백준] 1904. 01타일
문제 링크
풀이 과정
동적 계획법 문제입니다.
00
과 1
을 사용할 수 있는 규칙에 따라 다음과 같이 N에 따라 만들어지는 수열을 만들어 볼 수 있습니다.
- N이 1일 때 : 1
- N이 2일 때 : 00, 11
- N이 3일 때 : 100, 001, 111
- N이 4일 때 : 0000, 1100, 1001, 0011, 1111
for (int i = 3; i <= N; i++) dp[i] = (dp[i - 1] + dp[i - 2]) % MOD;
위와 같이 직접 만들어지는 수열을 작성해보며, 다음과 같은 규칙을 찾을 수 있습니다. 길이 i
인 수열은 길이가 i-2
인 수열에 00을 붙이거나, 길이 i-1
인 수열에 1을 붙여 만들 수 있습니다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] dp = new int[N + 1];
final int MOD = 15746;
if (N <= 2) {
System.out.println(N);
return;
}
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= N; i++) dp[i] = (dp[i - 1] + dp[i - 2]) % MOD;
System.out.println(dp[N]);
}
}
댓글남기기