728x90
반응형
1. 문제 설명
2. 풀이과정
- sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
- 직사각형의 가로의 길이를 입력받는다. n = int(sys.stdin.readline())
- 팩토리얼을 계산하는 함수를 생성한다. 이때 재귀함수로 구현하게 되면 RecursionError가 발생하게 되므로 for 문을 사용하여 구현한다. def Factorial(num)
- 팩토리얼 결과를 저장할 변수를 생성하고 1로 초기화한다. result = 1
- 1부터 매개변수로 입력받은 값까지 반복하며 for i in range(1, num + 1)
- 각 수를 차례대로 이전 결과에 곱하여 새로 저장한다. result *= i
- 최종 결과를 반환한다. return result
- 경우의 수를 저장할 변수를 생성하고 초기화한다. answer = 0
- 2x1 타일의 개수에 따라 1x2 타일의 개수가 정해진다. 2x1 타일의 개수는 최소 직사각형의 가로 길이를 2로 나눈 나머지 값만큼 들어가야 하며, 최대 직사각형 가로 길이만큼 들어갈 수 있고 타일의 개수는 1x2 타일로 인하여 2개씩 늘어나야 한다.
- 2x1 타일을 기준으로 개수를 늘려가며 가능한 경우의 수를 계산하였다. for i in range((n % 2), n + 1, 2)
- 2x1 타일의 개수가 정해지면 1x2 타일의 개수는 직사각형 가로의 길이에서 2x1 타일의 개수만큼 빼고, 뺀 결과를 2로 나눈 몫의 2배가 될 것이다. 하지만 1x2 타일은 무조건 아래위로 한 쌍을 이루어 배치되게 되므로 가로의 칸 수만 고려해도 상관없다. j = (n - i) // 2
- 2x1 타일의 개수와 1x2 타일의 개수가 정해지면 배치할 수 있는 조합의 수를 구하여 결과에 더한다. 조합의 수는 전체 타일의 개수 팩토리얼에 각각 타일의 개수 팩토리얼 결과를 곱하여 나눠주면 된다. answer += Factorial(i + j) // (Factorial(i) * Factorial(j))
- 경우의 수를 10,007로 나눈 나머지를 출력한다. print(answer % 10007)
반응형
3. 소스코드
import sys
n = int(sys.stdin.readline())
def Factorial(num):
result = 1
for i in range(1, num + 1):
result *= i
return result
answer = 0
for i in range((n % 2), n + 1, 2):
j = (n - i) // 2
answer += Factorial(i + j) // (Factorial(i) * Factorial(j))
print(answer % 10007)
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 10814번 : 나이순 정렬 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.24 |
---|---|
[백준] 1149번 : RGB거리 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.23 |
[백준] 10773번 : 제로 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.21 |
[백준] 1021번 : 유기농 배추 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.21 |
[백준] 7568번 : 덩치 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.20 |
[백준] 2581번 : 소수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.17 |
[백준] 11650번 : 좌표 정렬하기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.17 |
[백준] 1427번 : 소트인사이드 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.17 |