본문으로 바로가기

[알고리즘]연속 부분수열

category Algorithm/Two pointers, Sliding window 2021. 10. 18. 20:23
728x90
반응형

▷ 문제

N개의 수로 이루어진 수열이 주어집니다.

이 수열에서 연속부분수열의 합이 특정숫자 M이 되는 경우가 몇 번 있는지 구하는 프로그램을 작성하세요.

만약 N=8, M=6이고 수열이 1 2 1 3 1 1 1 2과 같다면

합이 6이 되는 연속부분수열은 {2, 1, 3}, {1, 3, 1, 1}, {3, 1, 1, 1}로 총 3가지입니다.

* 입력

첫째 줄에 N(1≤N≤100,000), M(1≤M≤100,000,000)이 주어진다.

수열의 원소값은 1,000을 넘지 않는 자연수이다.

* 출력

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

▷ 입력 예시

8 6

1 2 1 3 1 1 1 2

▷ 출력 예시

3

▷ 풀이

import java.util.Scanner;

public class Main {	
    public int solution(int n, int k, int[] arr){
      int answer = 0;

      for(int i=0; i<n; i++) {
        int sum = 0;
        for(int j=i; j<n; j++) {
          sum += arr[j];
          if(sum > k){
            break;
          } else if(sum == k){
            answer ++;
            break;
          }
        }
      }

      return answer;
    } 

    public static void main(String[] args){
        Main main = new Main();
        Scanner kb = new Scanner(System.in);

        int n = kb.nextInt();
        int k = kb.nextInt();
        int[] arr = new int[n];

        for(int i=0; i<n; i++){
          arr[i] = kb.nextInt();
        }

        System.out.println(main.solution(n, k, arr));
      }
  }
반응형