나의 풀이.
이 문제는 투 포인터로 풀어보라는 힌트가 있었기에 for - loop을 사용하지 않고 풀어보고
사실 아직 알고리즘에 대한 이해가 낮아 기존 학습했던 코드를 참고 삼아 이해하려 하며 다시 풀어보았다.
투 포인터(Two Pointers)는 배열에서 두 개의 포인터를 사용해서 원하는 결과를 얻는 방법으로
두 개 포인터의 배치 방법은
- 같은 방향에서 시작: 첫번째 원소에 둘다 배치
- 서로 다른 방향에서 시작 : 첫번째 원소와 마지막 원소에 배치
이번 문제는 같은 방향에서 시작하는 방법으로 작성해보았다.
아직은 많이 어렵다. 이해하도록 노력하자.
import java.util.Scanner;
public class SumOfNumbers2003 {
public static int twoPointer(int[] arr, int target) {
int p1 = 0;
int p2 = 0;
int sum = 0;
int cnt = 0;
while (true) {
if (sum > target) {
sum -= arr[p1++];
} else if (p2 == arr.length) {
break;
} else {
sum += arr[p2++];
}
if (sum == target) {
cnt += 1;
}
}
return cnt;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N ; i++) {
arr[i] = sc.nextInt();
}
System.out.println(twoPointer(arr, M));
}
}