
📋문제 정리
- n개의 자연수 배열의 특정 구간이 K보다 큰 모든 쌍을 구해라.
🎯풀이
- 숫자의 배열을 생성 및 초기화하고 start,end,sum을 0으로 초기화한다.
- sum이 K보다 크면 end 이후로 남은 갯수(전부다 K보다 큼)를 전부 cnt로 더하고 현재 start를 빼고 start++를 해준다.
- K보다 작으면 end를 더한 후 증가시켜준다.
- end가 배열을 넘어가면 종료시킨다.
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int arr[] = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
int k = Integer.parseInt(st.nextToken());
int start = 0;
int end = 0;
long sum = 0;
long cnt = 0;
while (true) {
if (sum > k) {
cnt += (n - end + 1);
sum -= arr[start];
start++;
} else if (end == n) {
break;
} else {
sum += arr[end];
end++;
}
}
sb.append(cnt);
System.out.println(sb);
br.close();
}
}