문제 풀이/백준

[백준] 1806번. 부분합 (JAVA)

27200 2023. 1. 12. 14:11

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


문제


풀이

 

import java.util.*;


public class Main {

	public static void main(String[] args) {

		Scanner kb = new Scanner(System.in);
		int n = kb.nextInt();
		long m = kb.nextLong();
		int[] arr = new int[n];
		for(int i = 0; i < n; i++) {
			arr[i] = kb.nextInt();
		}
		int answer = 100001;
		int sum=0, lt=0, rt=0;
		while(true){
	          if(sum >= m){
	              sum -= arr[lt];
	              answer = Math.min(answer, (rt- lt));
	              lt++;
	          } else if(rt == n) {
	              break;
	          }else{
	              sum += arr[rt];
	              rt++;
	          }
	    }
		
		if(answer == 100001){
            System.out.println(0);
        }else{
            System.out.println(answer);
        }
    }
}

 문제를 처음 읽고 투포인터 문제라는 것만 알 수 있다면 전혀 골드4 수준의 문제는 아니라고 생각한다. 알고리즘 강의에서 투포인터를 이미 접한 적이 있어서 어렵지 않게 해결 할 수 있었다.

 

(처음에 aswer를 100001이 아닌 1000001로 잘못 선언해서 고생 좀 했다....)