아마 수식 자체는 맞을텐데 실수 오차로 인해 틀렸을 것입니다. 일례로
int(math.factorial(1000) / math.factorial(950))를 보면 수학적으로는 저 값이 951 x 952 x ... x 1000 이니 딴건 몰라도 1의 자리가 0인건 확실한데 막상 출력해보면 287...168 이 됩니다. 정확한 내부 계산 매커니즘은 모르지만 Python 3의 / 은 실수를 반환하는 나눗셈 연산이라 정수를 나누더라도 그 정수를 실수로 변환하는 것 같습니다.
해결 방법은
1. / 을 // 으로 고쳐 연산 결과가 정수가 되게 한다.(이 방법으로 통과되는걸 확인했긴한데 n이 1000으로 그다지 크지 않아 가능한 풀이이지 n이 더 컸다면 math.factorial(x)을 계산하는 것 자체가 너무 무거운 연산이라 시간초과가 났을 가능성이 큽니다.)
2. fact[x] = x! 을 10007로 나눈 나머지라는 배열을 미리 만들어두고 정수의 역원등을 적절하게 이용해 모든 연산을 Z_10007 안에서 이루어지게 한다.
이 2가지가 있겠습니다.
1000daughter 3년 전
입력한 수인 n이 짝수인 경우와 홀수인 경우로 먼저 케이스를 나눈 뒤,
서있는 타일을 a, 누워있는 타일을 b로 놓아 가능한 경우의 수를 고려해 풀이했습니다.
1부터 81까지는 정답과 제 코드의 결과가 같은데(피보나치수열) n=82부터는 정답이랑 제 코드의 결과가 달라지네요...ㅜㅜ
풀이방식에는 문제가 없다고 생각하는데 그 이유가 뭔지 잘 모르겠습니다.