[Coding Test] 백준 JAVA 2003 수들의 합2- 투포인터

LeeSeungEun·2023년 5월 29일
0

Coding Test

목록 보기
36/38

1. 문제

2. 코드

import java.util.*;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }

        int p1 = 0;
        int p2 = 0;
        int sum = 0;
        int cnt = 0;

        while (p2<n) {
            if (sum > m || p1 == n) {
                sum -= arr[p2++];
            } else {
                sum += arr[p1++];
            }

            if (sum == m) {
                cnt++;
            }
        }
        System.out.println(cnt);
    }
}

3. 풀이

  • 투 포인터에서, p1 / p2 = 0 으로 시작한다.
    1. 구간 합(sum)이 M을 초과하거나, p1이 배열의 범위를 넘으면 p1을 오른쪽 한칸 이동을 해준다
    2. 구간 합(sum)이 M과 같거나 이하일때, end가 배열의 범위를 넘지 않을 때, p1을 오른쪽 한칸 이동 해준다.
    3. 만약 구간합(sum)이 M과 같다면 결과(count)를 증가시켜준다.

4. 링크

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

0개의 댓글