์ค์ผ์น
- 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)ํด๊ฒฐ
-
์ฐ์ ์ด์ ๊ณผ ๊ฐ์ด ๊ตฌ๊ฐ ํฉ
S๋ฅผ ๊ตฌํ๋ค.
-
๊ตฌ๊ฐ ํฉ์ ๋๋จธ์ง ์ฐ์ฐ์ ์ ์ฉํ ๊ฐ
K๋ ๊ตฌํ๋ค.
S[i] - S[j]๋ ์๋ณธ ๋ฆฌ์คํธA์j+1๋ถํฐi๊น์ง์ ๊ตฌ๊ฐ ํฉ์ด๋ค.S[i] % M๊ณผS[j] % M์ ๊ฐ์ด ๊ฐ์ผ๋ฉด(S[i] - S[j]) % M = 0์ด๋ค. ์ฆ,S[i] % M = S[j] % M์ธ ์์์(i, j)์ด ์๋ค๋ ๊ฒ์ ์๋ณธ ๋ฆฌ์คํธ์์j+1๋ถํฐi๊น์ง์ ๊ตฌ๊ฐ ํฉ์ดM์ผ๋ก ๋๋์ด๋จ์ด์ง๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
- ์ ๋ณต์ก๋๋ก ์ต์ ํํ ์ ์๋ค.
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))