투 포인트 알고리즘 이용
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public int solution(int n, int m, int[] arr) {
int answer = 0; //최대값
int sum = 0; // lt ~ rt까지 연속 부분 수열의 합
int lt = 0;
for (int rt = 0; rt < n; rt++) {
sum += arr[rt];
while (sum > m) {
sum -= arr[lt++]; //lt값을 빼고나서 증가
}
if (sum == m) {
answer ++;
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int m = kb.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
System.out.println(T.solution(n, m, arr));
}
}
'Algorithm > 문제' 카테고리의 다른 글
30. 최대 길이 연속 부분 수열 (0) | 2023.08.10 |
---|---|
29. 연속된 자연수의 합 (0) | 2023.08.08 |
27. 최대 매출 (0) | 2023.07.25 |
26. 공통 원소 구하기 (0) | 2023.07.24 |
25. 두 배열 합치기 (1) | 2023.07.24 |