문제
2xn크기의 직사각형을 1x2, 2x1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2x5 크기의 작사각형을 채운 한 가지 방법의 예이다.
입출력 예시
입력: 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력: 첫째 줄에 2xn 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
코드
a = int(input()) # 입력 받는다
result = [0 for _ in range(0, 1001)] # 1000의 길이를 갖는 리스트를 미리 선언한다.
result[1] = 1 # n = 1일때의 경우의수는 1
result[2] = 2 # n = 2일때의 경우의수는 2
for i in range(3, 1001): # n = 3부터 n = 1000까지 모든 경우의수를 미리 계산해놓는다.
result[i] = (result[i - 1] + result[i - 2]) % 10007 # 괄호 안은 점화식 result[n - 1] + result[n - 2]
# n = 1일 때 1
# n = 2일 때 2
# n = 3일 때 3
# n = 4일 때 5
# n = 5일 때 8
# .
# .
# .
# n = n일 때 n - 1의 경우의수 + n - 2의 경우의수 => 점화식
print(result[a]) # a일때의 경우의수 출력
실행 화면
채점 결과
처음에 재귀함수로 풀어서 시간초과가 진짜 많이 떴는데, 반복문으로 하니까 빠르드라 ㅇ.ㅇ
728x90
'문제 풀이 > [BaekJoon]' 카테고리의 다른 글
[BaekJoon] 1002번 터렛 (Silver 3) - Python (1) | 2022.12.22 |
---|---|
[BaekJoon] 1074번 Z (Silver 1) - Python (0) | 2022.12.21 |
[BaekJoon] 11724번 연결 요소의 개수 (Silver 2) - Python (0) | 2022.12.20 |
[BaekJoon] 3711번 학번 (Silver 5) - Python (1) | 2022.12.19 |
[BaekJoon] 9095번 1, 2, 3 더하기 (Silver 3) - Python (0) | 2022.12.17 |