๐Ÿ“– [๋ฐฑ์ค€์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] Q.11441 ํ•ฉ ๊ตฌํ•˜๊ธฐ ๋ฌธ์ œ ํ’€์ด - java

๐Ÿ“– ๋ฌธ์ œ

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

N๊ฐœ์˜ ์ˆ˜ A1, A2, โ€ฆ, AN์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด M๊ฐœ์˜ ๊ตฌ๊ฐ„ i, j๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, i๋ฒˆ์งธ ์ˆ˜๋ถ€ํ„ฐ j๋ฒˆ์งธ ์ˆ˜๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ” ์ ‘๊ทผ๋ฒ•

Q.11441 ํ•ฉ ๊ตฌํ•˜๊ธฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

N๊ฐœ์˜ ์ˆ˜๊ฐ€ A1 A2 โ€ฆ An ๊นŒ์ง€ ์ฃผ์–ด์กŒ์„ ๋•Œ

M๊ฐœ์˜ ๊ตฌ๊ฐ„์ด i,j๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

M๊ฐœ์˜ ์ฃผ์–ด์ง„ ๊ตฌ๊ฐ„ i๋ฒˆ์งธ ์ˆ˜๋ถ€ํ„ฐ j๋ฒˆ์งธ ์ˆ˜๊นŒ์ง€ ํ•ฉ๋“ค M๊ฐœ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

M๋ฒˆ ๋™์•ˆ ๊ทธ๋ƒฅ i๋ฒˆ์งธ ๋ถ€ํ„ฐ j๋ฒˆ์งธ ๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ฒ ์ง€๋งŒ

์ข€ ๋” ํšจ์œจ์ ์ธ ํ’€์ด๋ฅผ ์œ„ํ•ด ๋ˆ„์ ํ•ฉ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ j๋ฒˆ์งธ๊นŒ์ง€์˜ ํ•œ๋ฒˆ์˜ for๋ฌธ์œผ๋กœ ๋ˆ„์ ํ•ฉ๋“ค์„ ๊ตฌํ•œ ํ›„

์ด ๊ฐ’๋“ค์„ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

i๊ฐ€ 2์ด๊ณ  j๊ฐ€ 4์ธ ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ๊ตฌํ•ด์•ผํ•œ๋‹ค๋ฉด

a2 + a3 + a4 ์˜ ํ•ฉ์ด ๋‹ต์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ’์€ a4๊นŒ์ง€์˜ ๋ˆ„์ ํ•ฉ - a2๊นŒ์ง€์˜ ๋ˆ„์ ํ•ฉ + a2 ๊ฐ’๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

sum[i] = sum[i-1]+num[i];

a4 ๊นŒ์ง€์˜ ๋ˆ„์ ํ•ฉ  a1 + a2 + a3 + a4
a2 ๊นŒ์ง€์˜ ๋ˆ„์ ํ•ฉ -a1 - a2
a2 ์˜ ๊ฐ’         +a2
๊ฒฐ๊ณผ      =>a2 + a3 + a4

์ด๋Ÿฐ ์‹์œผ๋กœ ๋ˆ„์ ํ•ฉ๋“ค์„ ์ด์šฉํ•˜๋ฉด ์ฃผ์–ด์ง€๋Š” M๊ฐœ์˜ ๊ตฌ๊ฐ„์˜ ํ•ฉ๋“ค์„ ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ


package problem.prefix_sum;

import java.io.*;

public class Main_11441 {
    static int sum[];
    static int num[];
    static BufferedReader br;
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    static int N = -1;
    static int M = -1;
    static StringBuilder sb;

    public static void main(String[] args) throws IOException {
        sb = new StringBuilder();
        br = new BufferedReader(new InputStreamReader(System.in));

        N = Integer.parseInt(br.readLine());
        num = new int[N+1];
        sum = new int[N+1];
        String in[] = br.readLine().split(" ");
        for(int i=1; i<=N; i++){
            num[i] = Integer.parseInt(in[i-1]);
        }
        init();
        M = Integer.parseInt(br.readLine());
        for(int a=0; a<M; a++){
            String input[] = br.readLine().split(" ");
            int i = Integer.parseInt(input[0]);
            int j = Integer.parseInt(input[1]);
            solve(i,j);
        }
        bw.write(sb.toString());
        br.close();
        bw.flush();
        bw.close();
    }

    public static void init(){
        for(int i=1; i<=N; i++){
            sum[i] = sum[i-1]+num[i];
        }
    }

    public static void solve(int start, int end){
        int result = sum[end] - sum[start-1];
        sb.append(result+"\n");
    }
}


Written on April 30, 2021