BackJoon Algorithm 수들의 합 2 2003 (Java)

업데이트:
1 분 소요

BackJoon Algorithm - Java

alt

문제

alt

풀이

..

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Back_2003 {
    public static void main(String[] args) throws IOException {
        // 입력을 받기 위한 BufferedReader를 사용하여 빠르게 입력 처리
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 첫 번째 줄 입력값 N(배열의 길이)와 M(목표 합)을 받아옴
        StringTokenizer token = new StringTokenizer(br.readLine());
        Integer N = Integer.parseInt(token.nextToken());  // 배열의 길이
        Integer M = Integer.parseInt(token.nextToken());  // 목표 합
        int arr[] = new int[N];  // N 크기의 배열 생성
        token = new StringTokenizer(br.readLine());  // 배열 요소들을 입력받음

        // 배열에 값을 입력
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(token.nextToken());
        }

        int count = 0;  // M과 같은 합을 이루는 부분 수열의 개수를 카운트
        int en;  // 배열에서의 끝 인덱스 (end)
        for (int st = 0; st < N; st++) {  // st는 배열에서 시작 인덱스 (start)
            int sum = 0;  // 현재 부분 수열의 합을 저장할 변수
            en = st;  // 끝 인덱스를 시작 인덱스와 동일하게 설정
            // sum이 M보다 작거나 같고 en이 배열을 넘지 않을 때까지 반복
            while (sum <= M && en < N) {
                sum += arr[en];  // 현재 수열의 합에 배열의 en번째 값 더하기
                if (sum == M) {  // 부분 수열의 합이 M과 같으면
                    count++;  // 부분 수열 개수 증가
                    break;  // 더 이상 같은 시작점에서 탐색을 진행하지 않음
                }
                en++;  // 끝 인덱스를 한 칸 증가시킴
            }
        }
        // M과 같은 합을 가지는 부분 수열의 개수를 출력
        System.out.println(count);
    }
}

댓글남기기