[코딩테스트][백준] 🔥 백준 1806번 "부분합" 문제: Java으로 완벽 해결하기! 🔥

김상욱·2024년 11월 11일
post-thumbnail

문제 링크

https://www.acmicpc.net/problem/1806

🕒 Java 풀이시간: 10분

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

// The main method must be in a class named "Main".
class Main {
    static int N;
    static int S;
    static int[] arr;
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st=new StringTokenizer(br.readLine());

        N=Integer.parseInt(st.nextToken());
        S=Integer.parseInt(st.nextToken());
        st=new StringTokenizer(br.readLine());

        arr=new int[N];
        for(int i=0;i<N;i++){
            arr[i]=Integer.parseInt(st.nextToken());
        }

        long sum=arr[0];
        int startIdx=0;
        int endIdx=0;
        int answer=100001;
        while(true){
            int size=endIdx-startIdx+1;
            if(sum>=S){
                if(size<answer){
                    answer=size;
                }
                sum-=arr[startIdx++];
                if(startIdx>=N){
                    break;
                }
            }else{
                if(endIdx>=N-1){
                    break;
                }
                sum+=arr[++endIdx];
            }
        }
        if(answer==100001)
            System.out.println(0);
        else
            System.out.println(answer);
    }
}

단순한 슬라이딩 윈도우 + 투 포인터 문제.

이렇게 Java으로 백준의 "부분합" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊

0개의 댓글