728x90
https://www.acmicpc.net/problem/11727
문제
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×17 직사각형을 채운 한가지 예이다.
입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
해결코드
n = int(input())
li = [0,1,3]
for i in range(3,1001):
li.append(li[i-1]+li[i-2]*2)
print(li[n]%10007)
문제풀이
바로 전에 풀었던 2*n 타일링 문제의 조금 업그레이드 된 버전 문제이다.
채울수 있는 타일 중에 2*2 타일이 추가가 되었다는 것인데,
사실 별 다를 것 없이 2*2타일의 경우의 수만 추가해주면 된다.
n=1일때 경우의 수 1
n=2일때 경우의 수 3
n=3일때 경우의 수 5
n=4일때 경우의 수 11....
이렇게 진행이 되는데 쉽게 규칙을 찾을 수 있다.
n의 경우의 수는 (n-1 경우의 수) + (n-2 경우의 수 *2)로 구할 수 있다.
저번 문제에서 해결했던 코드에서 li[1]값과 li[2]값 그리고 점화식만 수정하여 제출하였는데
계속해서 런타임에러가 떠서 아예 코드를 다른 방식으로 짰다.
원래는 li라는 리스트를 1000개 모두 0으로 만들어버리고
인덱스 값들을 업데이트하는 식으로 코드를 짰었는데
그렇게 하면 시간이 두배로 걸리는 것 같아서
그냥 li[0]~li[2]까지만 미리 지정해두고
li[3]부터는 append로 계속해서 추가해주는 식으로 진행하였다.
결과 li[n]을 10007로 나눈 나머지를 출력해주면 된다.
728x90
'Algorithm' 카테고리의 다른 글
[알고리즘] 백준 11659 구간 합 구하기 4 (파이썬 풀이) (0) | 2022.02.13 |
---|---|
[알고리즘] 백준 1012 유기농 배추 (파이썬 풀이) (0) | 2022.02.12 |
[알고리즘] 백준 11726 2*n타일링(파이썬 풀이) (0) | 2022.02.10 |
[알고리즘 ]백준 17626 (파이썬 풀이) (0) | 2022.02.09 |
[알고리즘] 백준 17219 비밀번호 찾기 (파이썬 풀이) (0) | 2022.02.08 |
댓글