문제 설명
1. 연속된 부분집합 수열에서의 합이 M 이 되면 된다.
풀이
1. 투 포인터를 사용했다.
증명
1. left right 가 인덱스를 저장해서 영역을 지정한다.
2. sum 이 더 크면 left 가 오른쪽으로 한 칸 오면서 빼고
3. 더 작으면 right 가 오른쪽으로 한 칸 가면서 더한다.
4. 반복하면 O(N)
코드
문제
N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i]+A[i+1]+…+A[j-1]+A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1≤N≤10,000), M(1≤M≤300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
출력
첫째 줄에 경우의 수를 출력한다.
예제 입력 1
4 2 1 1 1 1
예제 출력 1
3
예제 입력 2
10 5 1 2 3 4 2 5 3 1 1 2
예제 출력 2
3
'IT > 알고리즘' 카테고리의 다른 글
BOJ 백준온라인져지 2805 나무 자르기 풀이 (0) | 2018.06.16 |
---|---|
BOJ 백준온라인져지 1309 동물원 풀이 (0) | 2018.06.15 |
BOJ 백준온라인져지 2133 타일 채우기 풀이 (0) | 2018.06.14 |
BOJ 백준온라인져지 2902 KMP는 왜 KMP일까? 풀이 (0) | 2018.06.14 |
BOJ 백준온라인져지 2522 별 찍기 - 12 풀이 (0) | 2018.06.13 |