2026.06.24
가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다.
예를 들어서 n이 7인 직사각형은 다음과 같이 채울 수 있습니다.

직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요.
가로의 길이 n은 60,000이하의 자연수 입니다.
경우의 수가 많아 질 수 있으므로,
경우의 수를 1,000,000,007으로 나눈 나머지를 return해주세요.

시간 초과 오류 발생
class Solution {
public int fibo(int n) {
if (n <= 2) {
return n;
}
return fibo(n - 2) + fibo(n - 1);
}
public int solution(int n) {
return fibo(n) % 1000000007;
}
}
수학적 규칙을 찾아보던 중,
피보나치 수열과 같은 규칙을 가지고 있다는 것을 알아냄
n == 1일 때, 1
n == 2일 때, 2
n == 3일 때, 3
n == 4일 때, 5
n == 5일 때, 8
n == 6일 때, 13
n == 7일 때, 21
n == 8일 때 34 ...
다만 재귀로 구현하여 시간 초과 오류가 발생하였고,
AI를 통해
DP(Dynamic Programming), 이미 계산한 결과를 저장해서 재사용 하는 방식
를 사용하여 해결함
class Solution {
public int solution(int n) {
if (n <= 2) {
return n;
}
int fibo[] = new int[n + 1];
fibo[1] = 1;
fibo[2] = 2;
for (int i = 3; i <= n; i++) {
fibo[i] = (fibo[i - 2] + fibo[i - 1]) % 1000000007;
}
return fibo[n];
}
}