백준/코테문제집
[백준] C++ 나머지 합(10986)
2zreal
2025. 1. 23. 21:49
연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 문제이다.
연속된 부분 구간의 합이 M으로 나누어 떨어진다??
문제를 어떻게 해결하여야 하는 거지?? 이 문제를 해결하기 위해서는 아이디어가 필요하다.
누적합을 하면서 나머지를 구하는 것이다.
나머지가 1
나머지가 0
나머지가 0
나머지가 1
나머지가 0
나머지가 1인 경우를 유심히 관찰해 보자.
1만 있을 때와 1 2 3 1일 때 나머지가 1이다.
이 둘을 빼게 된다면?? 2 3 1이 남는다 2 3 1은 3으로 나누어 떨어진다.
이 아이디어를 이용해서 문제를 해결한다.
1. 나머지를 저장하는 배열을 만든다.
2. 배열에는 경우의 수가 저장된다.
3. 배열에 저장된 값을 가지고 2개씩 조합한다.
예를 들어 result[1]에 2가 들어 있다. 그러면 나머지가 1인 경우가 2개가 있다는 말이다.
2개를 가지고 조합을 하면?? 2*(2-1)/2 =1이다. 나머지가 1인 경우를 가지고 만들 수 있는 조합이 1개 있다는 의미이다.
result[0]에 3이 들어있다. 그러면 나머지가 0인 경우가 3개가 있다는 말이다.
3개를 가지고 조합을 하면?? 3*2/2=3 이다. 나머지가 0인 경우를 가지고 만들 수 있는 조합이 3개 있다는 의미이다.
자체적으로 나머지가 0이 되는 경우도 3가지가 있다.
1+3+3=7