728x90
1. 문제 요약
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하시오.
2. 접근 방법
숨어있는 규칙을 찾아봅시다.
i : 방법
1 -> 1
2 -> 2
3 -> 3
4 -> 5
5 -> 8
6 -> 13
7 -> 21
자세히 살펴보면 규칙을 발견할 수 있습니다.
현재 인덱스의 방법은 이전의 두 인덱스의 방법의 합과 같습니다.
즉, n = (n-1) + (n-2) 가 됩니다.
이는 피보나치 수열의 형태입니다.
이를 토대로 재귀함수를 이용합니다.
def solution(n:int):
if n <= 2:
return n
return solution(n-1) + solution(n-2)
다만 해당 코드는 시간초과가 발생하므로 최적화를 진행해야 합니다.
3. 파이썬
def solution(n:int):
dp = [1, 2]
for i in range(3, n+1):
dp.append(dp[i-2] + dp[i-3])
print(dp[n-1] % 10007)
4. 자바
static private int solution(int n) {
int[] dp = new int[n];
dp[0] = 1;
if (n > 1) {
dp[1] = 2;
}
for (int i = 2; i < n; i++) {
dp[i] = (dp[i - 1] + dp[i - 2]) % 10007;
}
return dp[n - 1];
}
5. 전체 코드
728x90
'개발일지 > Algorithm' 카테고리의 다른 글
백준 - 1937 욕심쟁이 판다 [DP] (0) | 2023.10.16 |
---|---|
백준 - 1149 RGB거리 [DP] (0) | 2023.10.13 |
백준 - 12865 평범한 배낭 [DP][탑다운][바텀업] (1) | 2023.10.10 |
백준 - 14501 퇴사 [브루트포스] (0) | 2023.10.07 |
백준 - 19942 다이어트 [백트래킹] (1) | 2023.10.06 |