반응형
📖 문제
📋 코드
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int dp[] = new int[1000001];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= 1000000; i++) {
dp[i] = (dp[i-1] + dp[i-2])%15746;
}
int N = sc.nextInt();
System.out.println(dp[N]);
}
}
👨🏻💻 결과
📕 풀이 방법
DP[N]
=
DP[N-2]
+
DP[N-1]
크기가 N인 타일을 만들기 위해서는
크기가 N-1인 타일 뒤에 "1"을 붙이고,
크기가 N-2인 타일 뒤에 "00"이나 "11"을 붙여서 만들 수 있습니다.
따라서 단순히 생각했을 때 DP[N] = DP[N-1] + 2*DP[N-2]가 정답인 듯 보입니다.
하지만 크기가 N-2인 타일 뒤에 "11"을 붙여 넣는 경우의 수는
이미 크기가 N-1인 타일 뒤에 "1"을 붙여 넣는 경우의 수에 포함되어 있으므로
정답은 DP[N] = DP[N-1] + DP[N-2]이 됩니다.
그냥 단순하게 값을 구하여 규칙을 살펴볼 때
값들이 피보나치수열의 형태를 띠고 있어 어렵지 않게 풀이할 수 있는 문제였습니다.
🔗 링크
https://www.acmicpc.net/problem/1904
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[JAVA] 백준 1932번 - 정수 삼각형 (0) | 2021.10.15 |
---|---|
[JAVA] 백준 1149번 - RGB거리 (0) | 2021.10.15 |
[JAVA] 백준 9184번 - 신나는 함수 실행 (0) | 2021.10.13 |
[JAVA] 백준 1003번 - 피보나치 함수 (0) | 2021.10.13 |
[JAVA] 백준 14889번 - 스타트와 링크 (0) | 2021.10.12 |