시작점을 오른쪽으로 이동시키면 항상 합이 감소하고,
끝점을 오른쪽으로 이동시키면 항상 합이 증가한다는 것을 알 수 있다.
package java_0626_twoPointer;
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int[N+1];
// 1부터 N까지 들어있는 배열
for (int i = 1; i <= N; i++) {
arr[i] = i;
}
int end = 1;
int cnt = 0;
int intervalSum = 0;
// start를 인덱스 0부터 n까지 반복
for (int start = 1; start <= N; start++) {
// 부분합이 res보다 작고,end 인덱스의 위치가 데이터의 개수보다 작을 때 실행
while (intervalSum < N && end <= N) {
intervalSum += arr[end];
end += 1;
}
if (intervalSum == N) {
cnt += 1;
}
intervalSum -= arr[start];
}
System.out.println(cnt);
}
}
N을 입력받고, 1~N까지 순차적으로 들어있는 배열을 만든다.
시작점과 끝점을 모두 맨 앞으로 위치시키고, 시작점이 끝까지 갈 때까지 계속 반복한다.
부분합을 0으로 초기화 시킨 후 끝점을 한칸씩 이동하면서 원하는 값이 N이 될 때까지 반복한다.
부분합이 N을 만족한다면, cnt++,
부분합이 N보다 커진다면, 시작점을 오른쪽으로 옮겨 합을 감소시킨다.
부분합이 N보다 작다면, 끝점을 오른쪽으로 이동시켜 합을 증가시킨다.
이를 계속 반복하다가 시작점이 배열의 끝까지 이동했다면, 반복문을 종료시킨 후
이를 만족하는 cnt의 개수를 출력한다.
'코테 > 백준' 카테고리의 다른 글
백준 9372번: 상근이의 여행 - Java (0) | 2024.06.26 |
---|---|
백준 1647: 도시 분할 계획 - Java (0) | 2024.06.26 |
백준 1717번: 집합의 표현 - Java (0) | 2024.06.26 |
백준 1541 잃어버린 괄호 - 파이썬 (0) | 2024.06.25 |
백준 10816 숫자 카드 2 - 파이썬 (0) | 2024.06.25 |