📌 문제
https://www.acmicpc.net/problem/2003
💻 소스코드
package baekjoon;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// S.4, 수들의 합 2
public class B2003 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 수열의 길이
int m = scanner.nextInt(); // 원하는 합
List<Integer> list = new ArrayList<>(); // 수열을 저장할 리스트
for (int i = 0; i < n; i++) {
list.add(scanner.nextInt()); // 수열의 각 원소를 리스트에 추가
}
int count = 0; // 합이 m인 부분 수열의 개수
int start = 0; // 부분 수열의 시작 인덱스
int end = 0; // 부분 수열의 끝 인덱스
int sum = 0; // 현재 부분 수열의 합
while (true) {
if (sum >= m) {
sum -= list.get(start++); // 부분 수열의 합이 m 이상이면 start를 증가시켜 부분 수열의 첫 번째 원소를 제외하고 합에서 빼줌
} else if (end == n) {
break; // 수열의 끝까지 탐색한 경우 반복문 종료
} else {
sum += list.get(end++); // 부분 수열의 합이 m 미만인 경우 end를 증가시켜 부분 수열에 다음 원소를 추가하고 합에 더해줌
}
if (sum == m) {
count++; // 부분 수열의 합이 m과 같은 경우 count를 증가시킴
}
}
System.out.println(count); // 결과 출력
}
}
'Algorithm' 카테고리의 다른 글
[Java] 백준 1254 : 팰린드롬 만들기 (0) | 2023.05.29 |
---|---|
[Java] 백준 2167 : 2차원 배열의 합 (0) | 2023.05.29 |
[Java] 백준 25556 : 포스택 (0) | 2023.05.08 |
[Java] 유클리드 호제법 (Euclidean Algorithm) (0) | 2023.04.29 |
[Java] 백준 2161 : 카드 1 (0) | 2022.06.28 |