import java.util.*;
class Main {
public int solution(int n, int m, int[] arr) {
int answer = 0, sum = 0, lt = 0;
for(int rt = 0; rt < n; rt++) {
sum += arr[rt];
if(sum == m) {
answer++;
}
// 합계가 m보다 높으면
while(sum >= m) {
// 배열 0부터 출발한 lt의 값을 빼고 ++
sum -= arr[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.print(T.solution(n, m, arr));
}
}
1. rt는 오른쪽으로 이동하면서 sum에 값 누적
2. sum이 m보다 높으면 while문으로 이동
3. sum에 rt의 값을 빼고 m과 같으면 answer++
4. lt, rt가 한칸씩 이동하면서 m과 같은지 확인하면 됨
import java.util.*;
class Main {
public int solution(int n, int m, int[] arr) {
int answer = 0, sum = 0, lt = 0;
for(int rt = 0; rt < n; rt++) {
sum += arr[rt];
if(sum == m) {
answer++;
}
while(sum >= m) {
sum -= arr[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.print(T.solution(n, m, arr));
}
}
'코딩테스트 > 기초' 카테고리의 다른 글
30. 최대 길이 연속부분수열 (0) | 2024.12.24 |
---|---|
29. 연속된 자연수의 합 (0) | 2024.12.21 |
27. 최대 매출 (0) | 2024.12.17 |
26. 공통원소 구하기 (0) | 2024.12.15 |
24. 멘토링 (1) | 2024.12.15 |