문제
https://www.acmicpc.net/problem/2003
2003번: 수들의 합 2
첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
www.acmicpc.net
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int arr[] = new int [n+1];
st = new StringTokenizer(br.readLine());
for(int i=0;i<n;i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int l = 0, r = 0;
int sum = 0;
int count = 0;
while(l<=r && r<=n) {
if(sum == m) {
count++;
}
if(sum >= m) {
sum = sum - arr[l];
l++;
}
else {
sum = sum + arr[r];
r++;
}
}
if(sum == m)
count++;
System.out.print(count);
}
}
문제
https://www.acmicpc.net/problem/2003
2003번: 수들의 합 2
첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
www.acmicpc.net
코드
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int m = Integer.parseInt(st.nextToken()); int arr[] = new int [n+1]; st = new StringTokenizer(br.readLine()); for(int i=0;i<n;i++) { arr[i] = Integer.parseInt(st.nextToken()); } int l = 0, r = 0; int sum = 0; int count = 0; while(l<=r && r<=n) { if(sum == m) { count++; } if(sum >= m) { sum = sum - arr[l]; l++; } else { sum = sum + arr[r]; r++; } } if(sum == m) count++; System.out.print(count); } }