[백준]10986번 나머지 합 python

2025. 7. 3. 08:17·코딩테스트/백준

 

 

 

이 문제는 수학적인 규칙을 찾는게 어려웠던 문제 이다.

 

규칙을 찾고 나면 코드는 굉장히 간단해서 살짝 허무할 정도다...ㅎ

 

 

 

일단 순서대로 누적합을 구해본다

 

1 2 3 1 2

 

의 누적합은

 

1 3 6 7 9 가 된다

 

이때 문제를 풀기 위해 가장 중요한 규칙은

 

M으로 나눈 나머지가 같은 누적합 A, B가 있을 때 A~B까지의 구간의 누적합은 M으로 나누어 떨어진다.

 

 

 

 

정리하자면 위와 같다

 

 

그래서 이를 토대로 각 나머지의 경우의 수를 구하고

예를 들어, M이 3이라면 나머지가 0인 경우의 수 중 2개를 고르는 조합의 수, 1인 경우의 수 중 2개를 고르는 조합의 수, 2인 경우의 수 중 2개를 고르는 조합의 수를 모두 더해주면 된다.

 

 

정답 코드

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

#각 나머지의 경우의 수 저장하는 배열
r = [0] * m
pre_sum = 0
for i in range(n):
    pre_sum += arr[i]
    r[pre_sum%m] += 1

ans = r[0]

#나머지의 값이 같은 두 부분합 사이의 구간의 부분합은 M으로 나누어 진다
for i in range(m):
    ans += r[i]*(r[i]-1) // 2

print(ans)

 

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 14890번 경사로  (0) 2025.06.16
[백준] 1238 파티 -python 파이썬  (0) 2025.05.21
[백준]2252번 줄세우기 - python (위상정렬)  (0) 2025.05.19
[백준]11657 타임머신 - Python 파이썬  (0) 2025.04.18
[백준] 1253번 좋다 - python 파이썬  (0) 2025.04.17
'코딩테스트/백준' 카테고리의 다른 글
  • [백준] 14890번 경사로
  • [백준] 1238 파티 -python 파이썬
  • [백준]2252번 줄세우기 - python (위상정렬)
  • [백준]11657 타임머신 - Python 파이썬
hiwon
hiwon
천천히 굴러가는 코딩일기
  • hiwon
    하이원의 코딩 일기
    hiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프론트엔드 (0)
        • react (0)
      • 백엔드 (13)
        • node.js (1)
        • spring (6)
      • 코딩테스트 (57)
        • 백준 (41)
        • 프로그래머스 (15)
      • 프로디지털아카데미 (9)
        • 클라우드 (1)
        • JavaScript (1)
      • github (1)
      • AWS (2)
      • Infra (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MSA
    깃허브
    백트래킹
    bastion host
    kdt교육
    spring
    프로디지털아카데미
    AWS
    알파코캠퍼스
    신한투자증권
    알파코
    코테
    그리디
    BFS
    프디아
    K디지털트레이닝
    Java
    알고리즘
    프로그래머스
    코딩테스트
    다익스트라
    python
    IT기획
    파이썬
    투포인터
    github
    백준
    EC2
    UnionFind
    백엔드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hiwon
[백준]10986번 나머지 합 python
상단으로

티스토리툴바