mun dev

[백준] 2003 수들의 합2 자바 본문

알고리즘/백준

[백준] 2003 수들의 합2 자바

mndev 2023. 4. 11. 09:46

문제설명

N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.

 

입력

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

 

출력

첫째 줄에 경우의 수를 출력한다.

 

 

✅ 통과한 코드 

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

public class Main {

    public static void main(String[] args) throws IOException {
        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 sum = 0;
        int cnt = 0, start = 0,end=0;

        while(end<=n){
            if(sum==m){ //합이 m과 같다면 cnt 증가
                cnt++;
                sum-=arr[start++]; //값을 빼주고 start++

            }else if(sum<m){ //합이 m보다 작다면
                if(end==n) break; // end가 맨 끝이라면 끝내기
                sum+=arr[end++]; // 값을 더하고 end++

            }else{ //합이 m보다 크거나 같다면
                sum-=arr[start++];  //값을 빼주고 start++
            }
        }
        System.out.print(cnt);

 

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 11399 ATM 자바  (0) 2023.04.15
[백준] 2164 카드2 자바  (0) 2023.04.14
[백준] 2606 바이러스 자바  (0) 2023.04.05
[백준] 1260 DFS와 BFS 자바  (0) 2023.03.30
[백준] 9506 약수들의 합 자바  (0) 2023.03.26