알고리즘/알고리즘 코딩테스트_자바편(책)

백준_10986번_나머지합구하기

그기고기 2024. 2. 14. 23:45
728x90
반응형
SMALL

https://www.acmicpc.net/problem/10986

 

10986번: 나머지 합

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

www.acmicpc.net

import java.util.*;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt(); // 입력받을 숫자갯수 입력 
		int M = sc.nextInt(); // 나눌려고 하는 수 입력
		
		long sum [] = new long [N]; //숫자 입력 할 배열 
		long count [] = new long [M]; //합배열 
		
		long result = 0; //초기화 
		
		sum[0] = sc.nextInt();
		
		for(int i = 1; i < N; i++) {
			
			sum[i] = sum[i-1] + sc.nextInt();
		}
		
		for(int i = 0; i < N; i++) {
			
			int remain = (int)(sum[i] % M);
			if(remain == 0) {
				result++;
			}
			
			count[remain]++;
		}
		
		for(int i=0; i<M; i++) {
			
			if(count[i] > 1) {
				long cnt = count[i];
				result = result + (cnt * (cnt - 1) / 2);
			}
		}
		
		System.out.println(result);
		
	}

}

 

728x90
반응형
LIST