GiantStepDEV
article thumbnail

๋ฌธ์ œ

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

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ตฌ๊ฐ„ i์™€ j๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

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

์ œํ•œ

  • 1 ≤ N ≤ 100,000
  • 1 ≤ M ≤ 100,000
  • 1 ≤ i ≤ j ≤ N

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(1)์ด ์•„๋‹ˆ๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ํ‹€๋ฆฐ๋‹ค.

๋”ฐ๋ผ์„œ, ๋ฐ˜๋“œ์‹œ ๊ตฌ๊ฐ„ํ•ฉ ๊ณต์‹์œผ๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ’ก๊ตฌ๊ฐ„ํ•ฉ ๊ณต์‹? S[ i ] = S[ i - 1 ] + A[ i ]


1. ๋ฐฐ์—ด A์— Scanner๋ฅผ ํ†ตํ•ด ์ž…๋ ฅํ•œ ๊ฐ’์„ N๋ฒˆ ๋ฐ˜๋ณตํ•˜์—ฌ ๋‹ด๋Š”๋‹ค.
2. ๊ตฌ๊ฐ„ํ•ฉ ๊ณต์‹์„ ์ ์šฉํ•ด ํ•ฉ ๋ฐฐ์—ด S๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
3. M์ด 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ, ๊ณ„์‚ฐ ํ›„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] a = new int[n]; // ์ž…๋ ฅ ๋ฐ›์€ ์ˆ˜์˜ ๋ฐฐ์—ด
        long[] sum = new long[n]; // ๊ตฌ๊ฐ„ํ•ฉ์„ ์ ์šฉํ•œ ๋ฐฐ์—ด. ์ˆ˜๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ์–ด long์œผ๋กœ..

        for(int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
            if(i == 0) sum[i] = a[i];
            else sum[i] = sum[i-1] + a[i];
        }
        int start = 0;
        int end = 0;

        while(m != 0) {
            start = sc.nextInt();
            end = sc.nextInt();
            if(start != 1) System.out.println(sum[end - 1] - sum[start - 2]);
            else System.out.println(sum[end - 1]);
            m--;
        }
    }
}
profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!