백준(BOJ) - 나머지 합(10986번) - 파이썬(python)
2023. 2. 11. 17:04ㆍ코딩테스트/백준(BOJ)
문제
수 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())
arr=list(map(int,input().split()))
rem=[0 for _ in range(m)]
tmp=0
cnt=0
for x in range(n):
tmp+=arr[x]
# 나머지가 같은 것들끼리 (index) 개수를 카운트한 배열
rem[tmp%m]+=1
# 두 구간 중 나머지가 0인 부분은 그 자신만으로 나머지가0
cnt=rem[0]
for i in rem:
# 나머지가 같은 두 구간을 뽑는 조합
# i C 2 = i*(i-1)//2
cnt+=i*(i-1)//2
print(cnt)
728x90
'코딩테스트 > 백준(BOJ)' 카테고리의 다른 글
백준(BOJ) - 별 찍기 10(2447번) - 파이썬(python) (0) | 2023.02.12 |
---|---|
백준(BOJ) - 구간 합 구하기 5(11660번) - 파이썬(python) (0) | 2023.02.11 |
백준(BOJ) - 좌표 압축(18870번) - 파이썬(python) (0) | 2023.02.08 |
백준(BOJ) - 인간-컴퓨터 상호작용(16139번) - 파이썬(python) (0) | 2023.02.08 |
백준(BOJ) - 수열 (2559번) - 파이썬(python) (0) | 2023.02.07 |