알고리즘/코드워

[python]Can you sum?

(ㅇㅅㅎ) 2022. 12. 6. 22:28
728x90
반응형

https://www.codewars.com/kata/638bc5d372d41880c7a99edc/train/python

 

Codewars - Achieve mastery through coding practice and developer mentorship

A coding practice website for all programming levels – Join a community of over 3 million developers and improve your coding skills in over 55 programming languages!

www.codewars.com

 이 문제는 알고리즘 문제라기보다 수학 문제입니다. n을 입력받을 때 아래의 식의 답을 구하는 것입니다. 답이 클 경우 10의 9+7로 나눈 나머지 값을 답으로 합니다. n의 범위가 2에서 10의 18승이기 때문에 반복문을 이용하면 큰 수의 경우 시간이 오래 걸립니다. 시간을 단축하기 위해서는 수열 합의 식을 일반 함수 식으로 변경해야 합니다.

 일반 함수 식으로 변경하는 풀이법은 다음과 같습니다.

 이 식을 적용하면 다음과 같습니다. 

def f(n:int) -> int:
    m = pow(10, 9)+7
    return 2 * (pow(2, n, m) * (n * n - 2 * n + 3) - 3) % m

👀 pow(2, n, m)을 사용한 이유는 2의 n승의 경우 값이 크기 때문에 미리 지정되어있는 수로 나누면 시간을 단축할 수 있습니다.

반응형

'알고리즘 > 코드워' 카테고리의 다른 글

[python] Two's Complement  (0) 2023.07.18
[python] Binomial Expansion  (0) 2023.01.16
[python]Squash the bugs  (0) 2021.03.08
[python]Holiday VI - Shark Pontoon  (0) 2020.12.03
[python]Exclusive "or" (xor) Logical Operator  (0) 2020.12.02