kjw13   4년 전

매번 파이썬으로 하면 시간초과 되는데 해결책이 궁금합니다.

evenharder   4년 전

Python 인터프리터에 100**1000000을 입력해보면 엄청 오래 걸리고 에러가 나올 수도 있습니다. 자릿수가 엄청 늘어나니까요.

이 문제는 2가지 방법으로 접근할 수 있습니다.

첫 번째 방법은 a**b % 10 를 효율적으로 계산하는 것입니다.

자리수를 별로 늘이지 않으면서 a**b % 10을 구하는 방법을 생각해보시는 게 좋을 것 같습니다.

물론 그럼에도 불구하고 시간 초과가 날 수 있는데, 그 경우에는 a**b % 10을 O(log b)의 복잡도로 계산하는 방법을 구상하셔야 합니다.

두 번째 방법은, a**x % 10이 x에 대해 상당히 짧은 주기를 가진다는 점을 이용하는 것입니다.

이게 무슨 뜻인지는 직접 생각해보시는 게 좋을 것 같습니다.

koosaga   4년 전

자릿수가 최소 20자리를 넘어가는 아주 큰 수를 다루신다면 수의 길이가 수행 시간에 영향을 미칩니다. 50만자리 정도 되는 수에 100을 50만번 정도 곱하면 아마 python에서 1시간 정도 걸릴 겁니다. 이건 C++에서 큰 수를 직접 구현하고 짜도 비슷하게 걸립니다 (몇십분으로 줄 수는 있지만). 

시간 복잡도 분석을 할 줄 아신다면 당연한 이야기고, 그런거 아니더라도 100만자리 문자열에다가 쿼리를 100만번 정도 넣는다고 하면 상식적으로 시간 안에 돌 수가 없겠죠.

무슨 언어든지 중간 계산 결과가 커지는 경우가 나오면 매우 조심해야 합니다. 대부분의 문제는 중간 계산 결과가 20자리를 안 넘고도 계산할 수 있는 방법이 존재하고 그렇게 하셔야 합니다

댓글을 작성하려면 로그인해야 합니다.