목차

Subarray Divisibility

ps
링크cses.fi/…
출처CSES
문제 번호1662
문제명Subarray Divisibility
분류

누적합

시간복잡도O(n)
인풋사이즈n<=2*10^5
사용한 언어PyPy 3.9
제출기록0.10s
최고기록0.08s
해결날짜2026/05/07

풀이

코드

collection.Counter를 사용해서 TLE가 나는 코드

problems/cses/q1662_tle.py
"""Solution code for "CSES 1662. Subarray Divisibility".

- Problem link: https://cses.fi/problemset/task/1662
- Solution link: http://www.teferi.net/ps/problems/cses/1662
"""

import collections


def main():
    n = int(input())
    a = [int(x) for x in input().split()]

    pref_sums = [x := 0] + [x := (x + a_i) % n for a_i in a]
    answer = sum(
        count * (count - 1) // 2
        for count in collections.Counter(pref_sums).values()
    )

    print(answer)


if __name__ == '__main__':
    main()

그냥 list를 이용해서 카운팅

problems/cses/q1662.py
"""Solution code for "CSES 1662. Subarray Divisibility".

- Problem link: https://cses.fi/problemset/task/1662
- Solution link: http://www.teferi.net/ps/problems/cses/1662
"""


def main():
    n = int(input())
    a = [int(x) for x in input().split()]

    count_by_cum_sum = [0] * n
    count_by_cum_sum[0] = 1
    cum_sum = 0
    answer = 0
    for x in a:
        cum_sum = (cum_sum + x) % n
        answer += count_by_cum_sum[cum_sum]
        count_by_cum_sum[cum_sum] += 1

    print(answer)


if __name__ == '__main__':
    main()

teflib.labs.intset.FrozenIntCounter를 사용