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

2023. 2. 21. 12:00·백준 알고리즘/기타
728x90

https://www.acmicpc.net/problem/10986

 

10986번: 나머지 합

수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j)

www.acmicpc.net

특정 수로 나누어 떨어지는 구간 합의 개수를 구하는 문제이다.

 

모든 (i, j)쌍을 구하면 너무 오랜 시간이 걸린다.

 

구간 합을 적절히 이용해서 효율적으로 답을 구하는 알고리즘을 짜야한다.

 

이 문제를 풀기 위해 우선 누적 합을 통해 구간 합을 구하는 방법을 알아야 한다.

 

백준 11659번 문제를 한 번 풀어보는 것을 추천한다.

 

https://growth-coder.tistory.com/91

 

이 문제를 풀기 위해서는 누적 합과 누적 합을 m으로 나눈 나머지를 알아야 한다.

인덱스 0 1 2 3 4 5
리스트 0 1 2 3 1 2
누적 합 0 1 3 6 7 9
누적 합%m 0 1 0 0 1 0

누적 합을 m으로 나눈 나머지를 구하는 이유는 나머지가 같은 것의 개수를 세기 위함이다.

 

먼저 A, B라는 수가 있고 이 두 수를 m으로 나눈 나머지가 n이라하자.

 

그러면 다음 식이 성립할 것이다.

 

 

A = a * m + n

B = b * m + n

 

그리고 B에서 A를 빼보면 

 

( B - A ) = ( b - a ) * m

 

( B - A )의 값은 m으로 나누어 떨어지는 수가 된다.

 

그리고 B와 A가 누적 합이었다면 (B-A)는 구간 합이 될테고 m으로 나누어 떨어지는 구간 합이 되는 것이다.

 

그래서 구간 합이 m으로 나누어 떨어지는 조건은 m으로 나누었을 때 나머지가 같은 두 개의 누적 합을 빼는 것이다.

 

그래서 이 문제는 곧 나머지가 같은 누적 합의 개수를 구하고 거기서 2개를 뽑는 경우의 수를 구하는 문제가 된다.

 

그러면 위에서 구한 누적 합을 m으로 나눈 나머지를 다시 보면

인덱스 0 1 2 3 4 5
누적 합%m 0 1 0 0 1 0

0이 4개, 1이 2개 이므로 다음 식의 값을 구하면 된다.

$$ 4C2 + 2C2 $$

 

 

 

 

728x90

'백준 알고리즘 > 기타' 카테고리의 다른 글

[백준 1927][파이썬] 최소 힙. 파이썬 heapq 모듈 사용법 (우선순위 큐)  (0) 2023.03.13
[백준 1629][파이썬] 곱셈  (0) 2023.02.28
[백준 1541][파이썬] 잃어버린 괄호  (0) 2023.02.27
[백준 1004][파이썬] 어린 왕자  (0) 2023.02.16
[백준 11050, 11051][파이썬] 이항 계수  (0) 2023.02.15
'백준 알고리즘/기타' 카테고리의 다른 글
  • [백준 1629][파이썬] 곱셈
  • [백준 1541][파이썬] 잃어버린 괄호
  • [백준 1004][파이썬] 어린 왕자
  • [백준 11050, 11051][파이썬] 이항 계수
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    AWS Lambda
    다익스트라
    푸쉬 알람
    nn.RNN
    parametric search
    code tree
    bfs
    Merge
    ChatPromptTemplate
    RNN
    binary search
    파이썬
    스택
    ci/cd
    embedding
    Vector Store
    influxDB CLI
    스프링 OAuth2
    codetree
    openvidu 배포
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[백준 10986][파이썬] 나머지 합
상단으로

티스토리툴바