BOJ

백준 2003 - 수들의 합 2

yanJuicy 2022. 3. 17. 20:46
반응형

문제

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

 

2003번: 수들의 합 2

첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.

www.acmicpc.net

 

 

풀이

투 포인터를 이용한다. r 인덱스를 늘리면서 합을 구하고 m 값과 같은지 확인한다. l 인덱스가 증가할 때는 이전 l 인덱스에 있던 값을 빼준다.

 

 

코드

java

import java.util.Scanner;

public class Main {

    static int n, m;
    static int[] a;

    public static void main(String[] args) {
        input();
        solve();
    }

    private static void solve() {
        int r = 0, cnt = 0, sum = 0;
        for (int l = 1; l <= n; l++) {
            sum -= a[l - 1];

            while (r + 1 <= n && sum < m) {
                r++;
                sum += a[r];
            }

            if (sum == m)
                cnt++;
        }

        System.out.println(cnt);
    }

    private static void input() {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        a = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            a[i] = sc.nextInt();
        }
        sc.close();
    }
}

 

 

반응형

'BOJ' 카테고리의 다른 글

백준 1620 - 나는야 포켓몬 마스터 이다솜  (0) 2022.11.18
백준 2559 - 수열  (0) 2022.03.20
백준 2110 - 공유기 설치  (0) 2022.03.11
백준 1068 - 트리  (0) 2022.03.10
백준 1759 - 암호 만들기  (0) 2022.03.02