원본 : https://www.acmicpc.net/problem/10986
10986번: 나머지 합
수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j)
www.acmicpc.net
풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private static final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
private static final StringBuilder stringBuilder = new StringBuilder();
public static void main(String[] args) throws Exception {
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int n = Integer.parseInt(stringTokenizer.nextToken());
int m = Integer.parseInt(stringTokenizer.nextToken());
long[] remainder = new long[m];
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int sum = 0;
while (stringTokenizer.hasMoreTokens()) {
sum = (sum + Integer.parseInt(stringTokenizer.nextToken())) % m;
remainder[sum]++;
}
long count = remainder[0];
for (int i = 0; i < m; i++) {
count += (remainder[i] * (remainder[i] - 1)) / 2;
}
System.out.println(stringBuilder.append(count));
}
}
댓글 영역