πŸ“– [λ°±μ€€μ•Œκ³ λ¦¬μ¦˜ 풀이] Q.2003 μˆ˜λ“€μ˜ ν•© 2 풀이 λˆ„μ ν•© 방식 - java

πŸ“– 문제

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

N개의 수둜 된 μˆ˜μ—΄ A[1], A[2], …, A[N] 이 μžˆλ‹€. 이 μˆ˜μ—΄μ˜ i번째 μˆ˜λΆ€ν„° j번째 μˆ˜κΉŒμ§€μ˜

ν•© A[i] + A[i+1] + … + A[j-1] + A[j]κ°€ M이 λ˜λŠ” 경우의 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

πŸ” 접근법

Q.2003 μˆ˜λ“€μ˜ ν•© 2 λ¬Έμ œμž…λ‹ˆλ‹€.

i번째 μˆ˜λΆ€ν„° j번째 μˆ˜κΉŒμ§€μ˜ 연속 된 합이 M이 λ˜λŠ” 경우의 수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

μ—¬κΈ°μ„œ i번째 μˆ˜λΆ€ν„° j번째 μˆ˜κΉŒμ§€ 연속 된 합을 κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ―€λ‘œ

λˆ„μ ν•©μ„ μ΄μš©ν•΄μ„œ μ‰½κ²Œ 풀이가 κ°€λŠ₯ν•©λ‹ˆλ‹€.

jλ²ˆμ§ΈκΉŒμ§€μ˜ λˆ„μ ν•©μ„ λͺ¨λ‘ κ΅¬ν•˜κ³ λ‚˜λ©΄

μ‰½κ²Œ i번째 수 λΆ€ν„° j번째 μˆ˜κΉŒμ§€μ˜ 합을 ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€.

i번째->j번째 수 κΉŒμ§€μ˜ 연속 된 ν•© = jλ²ˆμ§ΈκΉŒμ§€μ˜ λˆ„μ ν•© - iλ²ˆμ§ΈκΉŒμ§€μ˜ λˆ„μ ν•© + i번째의 수

μ΄λ―€λ‘œ 이쀑 for문을 μ΄μš©ν•΄

각각의 i번째 μˆ˜λΆ€ν„° j번째 수 κΉŒμ§€μ˜ 합이 m이 λ˜λŠ” 경우의 수λ₯Ό ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’» μ½”λ“œ

package problem.sum;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main_2003 {
    static int n,m;
    static int numbers[];
    static int d[];
    static int count = 0;


    public static void main(String[] args) throws IOException {
        input();
        solve();
        System.out.println(count);
    }

    public static void solve(){
        d[0] = numbers[0];
        for(int i=1; i<n; i++) {
            d[i] = d[i-1]+numbers[i];
        }
        for(int i=0; i<n; i++){
            for(int j=i; j<n; j++){
                if(d[j]-d[i]+numbers[i] == m){
                    count++;
                }
            }
        }
    }


    public static void input() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp[] = br.readLine().split( " ");
        n = Integer.parseInt(temp[0]);
        m = Integer.parseInt(temp[1]);
        numbers = new int[n];
        d = new int[n];
        temp = br.readLine().split(" ");
        for(int i=0; i<n; i++){
            numbers[i] = Integer.parseInt(temp[i]);
        }
    }

}


Written on March 9, 2021