
내 코드
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);
}
}
'코딩테스트 > [백준] 코딩테스트 연습' 카테고리의 다른 글
가운데를 말해요 - 1655 (0) | 2022.03.27 |
---|---|
주사위 굴리기 - 14499번 (0) | 2022.03.22 |
로봇 - 1726번 (0) | 2022.03.17 |
탈옥 - 9376번 (0) | 2022.03.15 |
욕심쟁이 판다 - 1937번 (0) | 2022.03.14 |