쵼쥬 2022. 3. 18. 12:30


내 코드

package com.company;

import java.io.*;
import java.util.*;


public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int[] sum = new int[N + 1];
        int[] count = new int[M];
        st = new StringTokenizer(br.readLine());

        // 누적합을 이용해서 앞에서부터 더한 값의 나머지를 저장
        // 나머지의 갯수를 세어줌
        for (int i = 1; i <= N; i++) {
            sum[i] = (sum[i - 1] + Integer.parseInt(st.nextToken())) % M;
            count[sum[i]]++;
        }

        // 나머지가 0이면 혼자서도 나누어 떨어짐
        long total = count[0];

        // 나머지가 같은 누적합을 빼주면 M으로 나누어 떨어지는 구간이 나옴
        // nC2 로 구해줌
        for (int i = 0; i < M; i++) {
            total += ((long) count[i] * (count[i] - 1)) / 2;
        }        System.out.println(total);
    }
}