문제 

수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오.

즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) 쌍의 개수를 구해야 한다.

 

입력

첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 106, 2 ≤ M ≤ 103)

둘째 줄에 N개의 수 A1, A2, ..., AN이 주어진다. (0 ≤ Ai ≤ 109)

 

출력

첫째 줄에 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 출력한다.

 

정답

import sys
input = sys.stdin.readline

N, M= map(int, input().split())
num = list(map(int, input().split()))
sum = 0
NR = [0] * M

for i in range(N):
  sum += num[i]
  NR[sum % M] += 1

result = NR[0]

for i in NR:
  result += i*(i-1)//2
  
print(result)

 

 

'Coding_Test > Python Code Review' 카테고리의 다른 글

[백준-1940] 주몽의 명령  (0) 2023.10.26
[백준-2018] 수들의 합5  (0) 2023.10.26
[백준-11660] 구간 합 구하기5  (0) 2023.10.24
[백준-11659] 구간 합 구하기4  (1) 2023.10.24
[백준-1546] 평균구하기  (0) 2023.10.24