[백준] 1806 부분합 java

Bong2·2024년 7월 21일
0

알고리즘

목록 보기
50/63

문제 - 부분합

문제접근

처음에는 부분합이라는 이름때문에 부분합을 이용해서 풀려고했지만 아직 부분합알고리즘에 대해서 제대로 잘이용할 줄 몰라서 결국 투포인터를 활용해서 풀었다.

while(left <= right && right < N)

범위설정을 할때 위와 같이 설정을 했었다. 근데 left가 마지막인덱스까지 가지못하고 결국 끝나는 경우가 있기 때문에 배열의 범위를 N+1와 right <= N로 변경을 하여 마지막 인덱스까지 탐색할 수 있도록 설정해두었다.

소스코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int S = sc.nextInt();
        int ans = Integer.MAX_VALUE;
        int arr[] = new int[N+1];

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

        int left =0;
        int right =0;
        int sum = 0;
        while(left <= right && right <= N)
        {
            if( sum < S)
            {
                sum += arr[right++];
            }else{
                ans = Math.min(ans, right - left);
                sum -= arr[left++];
            }
        }
        System.out.println(ans == Integer.MAX_VALUE ? 0 : ans);
    }
}
profile
자바 백엔드 개발자로 성장하자

0개의 댓글