BOJ 1806 수들의 합 2 [Java]

AMUD·2022년 1월 23일
0

Algorithm

목록 보기
5/78

문제

BOJ 1806 수들의 합 2

접근방법

  • BOJ 1806 부분합 과 매우 유사
  • 슬라이딩 윈도우, 투포인터로 해결하는 문제
  • [ else if (end == N) break; ] 에 한 번 데였더니,, 이제는 쉽게 구현한다.

구현

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

public class Main {
    static int N, M, start, end, sum, sameCnt; // N은 원소 개수, S는 기준합
    static int[] nums;

    public static void main (String [] arg) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ", false);

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        nums = new int[N];

        st = new StringTokenizer(br.readLine(), " ", false);
        for (int i = 0; i < N; i++)
            nums[i] = Integer.parseInt(st.nextToken());

        start = 0;
        end = 0;
        sum = 0;
        sameCnt = 0;
        while(true) {
            if (sum >= M) {
                if (sum == M) sameCnt++;
                sum -= nums[start];
                start++;
            }
            else if (end == N) break;
            else {
                sum += nums[end];
                end++;
            }
        }

        System.out.print(sameCnt+"");
    }
}

제출

profile
210's Velog :: Ambition Makes Us Diligent

0개의 댓글