파이썬의 int형은 고정된 크기가 아닙니다. 그 변수가 실제로 담고 있는 값의 크기에 따라 유동적으로 사용하는 메모리가 변합니다.
수가 매우 커지게 되면 그 수를 정확하게 표현하기 위해 점점 더 많은 메모리를 할당받게 되는데, 이 문제의 경우 무턱대고 모든 항의 값을 다 구하려고 하면 N에 비례하여 자릿수가 점점 늘어나기 때문에 총 사용하게 되는 공간 복잡도가 O(N^2)이 됩니다. 배열을 쓰지 않고 한정된 변수들 사이에서 돌려가면서 처리하면 공간 문제는 해결하겠지만 여전히 시간 복잡도가 O(N^2)이기 때문에 통과할 수 없습니다.
이 문제와 같이 "~로 나눈 나머지를 출력한다"는 문제는 거의 대부분 전체 답을 먼저 구하고 마지막에 나머지 연산을 한 번 하라는 것이 아니라, 연산 과정에서 모듈로의 성질을 이용하여 수를 계속 작게 유지할 수 있도록 배려를 해주는 것입니다. 안 그러면 수가 너무 커져서 계산 시간도 오래 걸릴 뿐만 아니라 파이썬처럼 bigint를 지원하지 않는 언어에서는 구현하는 것 자체가 매우 까다롭기 때문입니다.
jhangww 2년 전
이렇게 했는데 다른 분 맞았다는 코드보다 더 메모리를 잡아먹는다고 생각이 안드는데 왜 안될까요 ㅠㅠ