난이도: 골드 3
풀이: 먼저 배열을 구한 뒤, 합 배열을 구해 놓는다. 수의 합별로 M으로 나누어 떨어지는 값의 개수들을 찾는 것이므로, 합배열을 각각 M으로 나눈 나머지의 배열을 구하고, 0이 되는 값들의 개수를 더하고, 각 나머지의 숫자들별로 nC2를 계산해 구하면 되는 문제이다.
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 29 30 31 32 33 | import java.util.*; import java.io.*; public class Q10986 { public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); int M = scanner.nextInt(); long S[] = new long[N]; long C[] = new long[M]; long answer = 0; S[0] = scanner.nextInt(); for (int i=1; i < N; i++) { S[i] = S[i - 1] + scanner.nextInt(); } for (int i = 0; i < N; i++) { int remainder = (int) (S[i] % M); if (remainder == 0) answer ++; C[remainder] ++; } for (int i = 0; i < M; i++) { if (C[i] > 1) { answer = answer + (C[i] * (C[i] - 1) / 2); } } System.out.println(answer); } } | cs |
'Algorithm (Java) > Data structure' 카테고리의 다른 글
배열과 리스트: 연속된 자연수의 합 구하기 (백준 2018) (0) | 2023.11.09 |
---|---|
配列とリスト: Two Pointersアルゴリズム (0) | 2023.11.09 |
배열과 리스트: 구간합 구하기2 (백준 11660) (2) | 2023.11.09 |
배열과 리스트: 구간합 구하기 (백준 11659) (3) | 2023.11.09 |
配列とリスト: 区間の合計 (0) | 2023.11.09 |