์Šค์ผ€์น˜

  • N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ตฌ๊ฐ„์˜ ๊ธธ์ด๋ฅผ 1๋ถ€ํ„ฐ ๊นŒ์ง€ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์กฐ์‚ฌํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋กœ ๋งค์šฐ ๋†’์Œ

์ดˆ๊ธฐ ์•„์ด๋””์–ด (์‹œ๊ฐ„ ์ดˆ๊ณผ)

  • ์œผ๋กœ ๊ตฌ๊ฐ„ ํ•ฉ์„ ๊ตฌํ•˜๊ณ 
  • ์œผ๋กœ ๊ฐ ๊ตฌ๊ฐ„ ํ•ฉ๊ฐ’์ด ์œผ๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š”์ง€ ๊ฒ€์‚ฌ
    • ๋–จ์–ด์ง€๋ฉด count++
  • ๊ทผ๋ฐ ์ด ์ด๋ผ์„œ 1์ดˆ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆผ ( = 1์ดˆ)
import sys  
input = sys.stdin.readline  
  
n, m = map(int, input().split())  
a = list(map(int, input().split()))  
  
# ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ  
s = [0 for _ in range(n + 1)]  
for i in range(1, n + 1):  
    s[i] = (s[i-1] + a[i-1]) % m  
print(s)  
  
count = 0  
for i in range(1, n + 1):  
    for j in range(i, n + 1):  
        if (s[i-1] - s[j]) % m == 0:  
            count += 1  
  
print(count)

ํ•ด๊ฒฐ

  1. ์šฐ์„  ์ด์ „๊ณผ ๊ฐ™์ด ๊ตฌ๊ฐ„ ํ•ฉ S๋ฅผ ๊ตฌํ•œ๋‹ค.

  2. ๊ตฌ๊ฐ„ ํ•ฉ์— ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์ ์šฉํ•œ ๊ฐ’ K๋„ ๊ตฌํ•œ๋‹ค.

  1. S[i] - S[j]๋Š” ์›๋ณธ ๋ฆฌ์ŠคํŠธ A์˜ j+1๋ถ€ํ„ฐ i๊นŒ์ง€์˜ ๊ตฌ๊ฐ„ ํ•ฉ์ด๋‹ค.
  2. S[i] % M๊ณผ S[j] % M์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด (S[i] - S[j]) % M = 0์ด๋‹ค. ์ฆ‰, S[i] % M = S[j] % M์ธ ์ˆœ์„œ์Œ (i, j)์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์›๋ณธ ๋ฆฌ์ŠคํŠธ์—์„œ j+1๋ถ€ํ„ฐ i๊นŒ์ง€์˜ ๊ตฌ๊ฐ„ ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  3. ์˜ ๋ณต์žก๋„๋กœ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
import sys  
input = sys.stdin.readline  
  
n, m    = map(int, input().split())  
a       = list(map(int, input().split()))  
s       = [0 for _ in range(n)]  
k       = [0 for _ in range(m)]  
count   = 0  
  
# ๊ตฌ๊ฐ„ ํ•ฉ, ๋‚˜๋จธ์ง€๊ฐ’ ๊ตฌํ•˜๊ธฐ  
s[0] = a[0]  
k[s[0] % m] += 1  
for i in range(1, n):  
    s[i] = s[i-1] + a[i]  
    k[s[i] % m] += 1  
  
# ์ด ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ  
count += k[0]  
for i in range(m):  
    count += k[i] * (k[i] - 1) / 2  
  
print(int(count))