[백준] 10986번 나머지 합 (파이썬)

dongEon·2024년 4월 25일
0

문제링크: https://www.acmicpc.net/problem/10986

문제해결 아이디어

  • 1차원 배열의 누적합 문제이다
  • 누적합의 나머지가 같은 수 끼리 빼면 나머지가 0이 된다
  • 예제의 누적합의 경우 [1, 3, 6, 7, 9] 인데 나머지가 1인 1과 7을 빼도 나머지가 0이 된다.
  • 나머지값 별로 개수를 배열에 저장하고 조합을 통해서 정답을 구한다.

소스코드

import sys

input = sys.stdin.readline

n,m = map(int, input().split())

nums =  list(map(int, input().split()))

prefix_sum = [0] * n

prefix_sum[0] = nums[0]

for i in range(1,n):
    prefix_sum[i] = prefix_sum[i-1] + nums[i]

mod = [0] * m # 나머지 배열

for i in prefix_sum:
    mod[i%m] += 1 # 나머지가 같은 수의 개수를 구함

answer = mod[0] 

for i in mod:
    answer += i*(i-1) // 2 #조합을 통해 개수를 추가 ex)iC2

print(answer)
profile
반갑습니다! 알고리즘 문제 풀이 정리 블로그 입니다. 피드백은 언제나 환영입니다!

0개의 댓글