문제
수 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 |