문제
BOJ 1806 수들의 합 2
접근방법
- BOJ 1806 부분합 과 매우 유사
- 슬라이딩 윈도우, 투포인터로 해결하는 문제
- [ else if (end == N) break; ] 에 한 번 데였더니,, 이제는 쉽게 구현한다.
구현
import java.io.*;
import java.util.*;
public class Main {
static int N, M, start, end, sum, sameCnt;
static int[] nums;
public static void main (String [] arg) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ", false);
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
nums = new int[N];
st = new StringTokenizer(br.readLine(), " ", false);
for (int i = 0; i < N; i++)
nums[i] = Integer.parseInt(st.nextToken());
start = 0;
end = 0;
sum = 0;
sameCnt = 0;
while(true) {
if (sum >= M) {
if (sum == M) sameCnt++;
sum -= nums[start];
start++;
}
else if (end == N) break;
else {
sum += nums[end];
end++;
}
}
System.out.print(sameCnt+"");
}
}
제출