Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ncp배포
- 정보 상인 호석
- json
- Django
- PS
- DP
- Charfield
- python
- lgh
- 15681
- 백준
- 파이썬
- 백준 블로그
- ncloud서버
- 22252
- 1010번: 다리 놓기 (Python)
- 삼각형 각도
- linc3.0
- 삼각형
- 할로윈의 양아치
- max_length
- 20303
- 문제풀이
- 20492
- 별찍기 -10
- epsp
- 백준 티스토리
- 고속거듭제곱알고리즘
- 수들의 합 4
- 22986
Archives
- Today
- Total
DolphinDash
[Python] 10986 - 나머지 합 본문
문제
수 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으로 나누어 떨어지는 구간의 개수를 출력한다.
해설
문제에 대해서 이해가 잘 안가서 나머지가 나오는 경우의 수가 중요하다는 질문 게시판 내용을 보고 힌트를 얻음
소스 코드
n, m = map(int, input().split())
seq = list(map(int, input().split()))
count = 0
num = 0
s_seq = {}
for i in range(n):
num = (num + seq[i]) % m
if num == 0:
count += 1
try:
s_seq[num] += 1
except:
s_seq[num] = 1
for key, value in s_seq.items():
if value >= 2:
count += (value * (value-1)) / 2
print(int(count))
'PS > Solve' 카테고리의 다른 글
[Python] 1987 - 알파벳 (1) | 2025.08.28 |
---|---|
[Python] 32775 - 가희와 4시간의 벽 1 (2) | 2025.08.25 |
백준 7576번: 토마토 (Python) (0) | 2023.06.28 |
백준 1158번: 요세푸스 문제 (Python) (0) | 2023.05.23 |
백준 1010번: 다리 놓기 (Python) (0) | 2023.05.23 |