알고리즘

[백준, 자바, 2003번] 수들의 합 2

hminor 2024. 10. 14. 14:22
반응형

풀이

  • 처음에는 이전 값에 해당 하는 모든 값을 계속해서 추가한 뒤
  • 뭐 어떻게 할 수 있지 않을까 했다가
  • 뭔가 생각이 꼬여서 다시 문제를 집중해서 보니
  • 누적 합을 시켜놓은 배열에서
  • 기준 인덱스 값을 이후 인덱스 값에서 뺀 값과 M을 비교하며 체크
  • 여기서 값이 크거나 같다면 우선 break 하여 불필요한 시간을 사용하지 않도록 하여 해결.

 

import java.io.*;
import java.util.StringTokenizer;
public class _2003 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int[] li = new int[N+1];
        int result = 0;

        st = new StringTokenizer(br.readLine());
        for (int i=1; i<=N; i++) li[i] = li[i-1]+Integer.parseInt(st.nextToken());

        // 찾기
        for (int i=0; i<N; i++) {
            for (int j=i+1; j<=N; j++) {
                if (li[j]-li[i]==M) {
                    result ++;
                    break;
                } else if (li[j]-li[i]>M) break;
            }
        }
        System.out.println(result);
    }
}