알고리즘/백준
(백준/자바) 힌트문제3 03. 투 포인터 - 백준 2003번 문제 : 수들의 합2
son_i
2023. 8. 6. 03:17
728x90
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
* 생각해야 할 점 :
1. 수열을 정렬하면 안됨.
2. p2하나만 써도 됨.p1을 for의 i가 대신 해줌. for문 안에 while문으로 조건 검사
total += arr[p2++] 을 하면서 중간에 total == M이면 다음 p1으로 넘어감
나는 while문 밖에 total==M인 조건 검사를 해줬는데 틀렸다고 함.
p2한 번이 씹히는 거 같음.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class TwoPointer_03 {
public static void main(String args[]) throws IOException {
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];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int answer = 0;
for (int i = 0; i < N; i++) {
int p2 = i;
int total = 0;
while (p2 < N && total < M) {
total += arr[p2++];
if (total == M) {
answer++;
break;
} else if (total > M) {
break;
}
}
}
System.out.println(answer);
}
}
728x90