스터디/Algorithm

[백준] 수들의 합2 2003 java - 투포인터

혜유우 2024. 9. 10. 17:43

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

 

left~right(이전 값까지) 합하며

결과값이 M과 같은지 비교하도록 풀이했다.

right 이전값까지 합해주므로 조건문을 잘 설정해야하는데

처음에는 break문을 잘못 걸어줘서 계속 틀렸다 ㅜㅜ

내가 찾은 반례는 다음과 같다!

 

10 8 3

1 1 1 1 1 1 2 2 2

Answer: 4 (답)

내 출력값: 3

 

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine());
        int[] arr = new int[N];
        for(int i=0;i<N;i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int left = 0, right = 0;
        int sum = 0;
        int cnt = 0;

        while(true){
            if(sum<M){
                if(right==N) break;
                sum += arr[right++];
            } else {
                sum -= arr[left++];
            }

            if(sum == M){
                cnt++;
            }
        }

        System.out.println(cnt);

    }

}