14246 K보다 큰 구간 ⬛

kkmdevel·2024년 10월 7일

코딩테스트

목록 보기
18/21

📋문제 정리

  • 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문
        while (true) {
            if (sum > k) {
                cnt += (n - end + 1);  // 구간 개수를 계산
                sum -= arr[start];     // start 포인터를 이동하며 합에서 뺌
                start++;
            } else if (end == n) {
                break;  // 배열 끝에 도달하면 반복 종료
            } else {
                sum += arr[end];  // end 포인터를 이동하며 합에 더함
                end++;
            }
        }

        sb.append(cnt);
        System.out.println(sb);
        br.close();
    }
}
profile
25/08/12

0개의 댓글