코딩테스트/BOJ

[BOJ] 2003 수들의 합 2 - JAVA

5월._. 2022. 7. 2.
728x90

1. 문제

 

2003번: 수들의 합 2

첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.

www.acmicpc.net

N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.


2. 풀이

1.  입력받은 뒤 시작지점을 하나씩 뒤로 밀어가면서 탐색한다.

2.  시작지점부터 현재 지점까지 합이 M과 같다면 count를 +1한다.

3.  시작지점부터 현재 지점까지 합이 M보다 크거나 같다면 시작지점을 한 칸 늘려야하므로 멈춘다. 

4.  count를 출력한다.

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

public class BOJ_2003_수들의합2 {
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      StringTokenizer st = new StringTokenizer(in.readLine());
      int N = Integer.parseInt(st.nextToken());
      int M = Integer.parseInt(st.nextToken());
      st = new StringTokenizer(in.readLine());
      int[] input = new int[N];
      for(int i=0;i<N;i++) input[i] = Integer.parseInt(st.nextToken());

      long sum;
      int count = 0;

      for(int first = 0;first<N;first++){
         sum = 0;
         for(int last=first;last<N;last++){
            sum += input[last];
            if(sum==M) count++;
            if(sum>=M) break;
         }
      }

      System.out.println(count);
   }
}

3. 결과

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 2504 괄호의 값 - JAVA  (0) 2022.07.04
[BOJ] 10825 국영수 - JAVA  (0) 2022.07.03
[BOJ] 1251 단어 나누기 - JAVA  (0) 2022.07.01
[BOJ] 2217 로프 - JAVA  (0) 2022.06.30
[BOJ] 1302 베스트셀러 - JAVA  (0) 2022.06.25

댓글