[백준] 1806 부분합

장철현·2024년 2월 12일
0

백준

목록 보기
74/80

링크

1806 부분합

문제

풀이

이 문제는 투포인터로 풀었다.
1. 현재 값을 sum이라는 변수에 더한다
2. 만약 S 이상이라면 맨 처음에 더했던 요소를 뺀다.
3-1. 뺏음에도 불구하고 S 이상이라면 또 처음에 있던 요소를 뺀다.
3-2. S보다 작다면 다시 다음 요소를 더해준다.

이렇게 해서 풀었다.

코드

import java.awt.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.Array;
import java.util.*;
import java.util.List;

public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = br.readLine().split(" ");
        int n = Integer.parseInt(arr[0]);
        int limit = Integer.parseInt(arr[1]);

        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] numbers = new int[n];
        for(int i=0;i<numbers.length;i++) numbers[i] = Integer.parseInt(st.nextToken());

        int sum = 0;
        int start = 0;
        int end = 0;
        int len = Integer.MAX_VALUE;

        for(int i=0;i<numbers.length;i++){
            sum += numbers[i];

            if(sum >= limit){
                while(true){
                    sum -= numbers[start];
                    start++;

                    if(sum >= limit)
                        len = Math.min(len, end - start + 1);
                    if(sum < limit) {
                        break;
                    }
                }

            }

            end++;

        }

        if(len == Integer.MAX_VALUE) System.out.println(0);
        else System.out.println(len);

    }

}

0개의 댓글