본문 바로가기

Algorithm

BOJ 4948번 부분합 ( 투포인터 ) JAVA

BOJ 4948번 부분합 ( 투포인터 ) JAVA


풀이

투포인터를 이용하는 문제입니다.

p1, p2 두 개의 int 변수를 선언하여, p2가 n이 될 때까지 연산을 계속해줍니다.

 

링크

https://www.acmicpc.net/problem/1806

 

소스 코드


package boj;

import java.util.Scanner;

public class Boj1806 {
    static int n, s;
    static int[] a;
    static final int MAX = 987654321;
    static int res = MAX;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        s = sc.nextInt();
        a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }
        int p1 = 0;
        int p2 = 0;
        int sum = 0;
        while (true) {
            if (sum >= s) {
                sum -= a[p1++];
                res = Math.min(p2 - p1 + 1, res);
            } else if (p2 == n) {
                break;
            } else {
                sum += a[p2++];
            }
        }
        if (res == MAX) {
            System.out.println(0);
        } else
            System.out.println(res);
    }
}