Archives
Recent Posts
«   2025/02   »
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
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[백준] 10986번 : 나머지 합 - 코틀린 본문

코딩테스트

[백준] 10986번 : 나머지 합 - 코틀린

Wise-99 2023. 6. 16. 06:56
 

10986번: 나머지 합

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

www.acmicpc.net

❓ 문제 풀이

  • 누적 합을 이용한 문제이다.
  • 처음에 생각했던 건 구간 합을 이용하는 것이었다. 실제로 문제에도 구간의 합이라 써있어서...
  • 구간 합을 구하여 M으로 나눈 나머지가 0이면 되는 것이다.
  • sum이라는 Array에 N개의 수 구간 합을 만들면 i ~ j 까지의 구간 합은 sum[j] - sum[i-1]이다.
  • 따라서 (sum[j] - sum[i-1]) % M이 0인 경우를 찾으면 된다.

 

 

 

❓내 코드

import java.util.Scanner

fun main() = with(Scanner(System.`in`)) {
    val N = nextInt() // 숫자의 개수
    val M = nextInt() // 나눌 수
    val reminder = IntArray(M)
    
    // 나머지를 더할 변수
    var sum = 0
    
    for(i in 1 .. N){
        sum += nextInt() % M
        reminder[sum % M]++
    }
    
    var answer = reminder[0].toLong()
    for(i in 0 until M){
        val cnt = reminder[i]
        answer += cnt.toLong() * (cnt - 1) / 2
    }
    
    println(answer)
}