๐Ÿ’ก Algorithm

[Java] ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ4 - ๋ˆ„์  ํ•ฉ (Lv. Sliver3)

jcowwk 2025. 2. 10. 16:15

๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ4 - ๋ˆ„์  ํ•ฉ (Lv. Sliver3)


1. ๋ฌธ์ œ

2. ํ’€์ด


1. ๋ฌธ์ œ

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

 

2. ํ’€์ด

- ์ฝ”๋“œ ํ•ด์„ค

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

public class Main {
    static int N, M;
    static int[] arr;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine());
        arr = new int[N+1];
        for (int i = 1; i <= N; i++) {       
            arr[i] = arr[i-1] + Integer.parseInt(st.nextToken());
        }
        
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            System.out.println(arr[b] - arr[a-1]);
        }
    }
}

 

N+1๊ฐœ์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋ชจ๋“  ์›์†Œ๊ฐ€ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ๋ฉ๋‹ˆ๋‹ค.

๋ˆ„์ ํ•ฉ์„ ๊ณ„์‚ฐํ•  ๋•Œ arr[0]์€ 0์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š๊ณ  arr[1]๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ ์Šต๋‹ˆ๋‹ค.

 

arr[i] = arr[i-1] + Integer.parseInt(st.nextToken()); ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ  5 4 3 2 1๋ฅผ ์ž…๋ ฅํ•œ๋‹ค๋ฉด

i arr[i]
0 0
1 5
2 9
3 12
4 14
5 15

 

์œ„์™€ ๊ฐ™์ด ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ ๋‹ค์Œ์— a๊ตฌ๊ฐ„๊ณผ b๊ตฌ๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ›์•„์„œ b์ธ๋ฑ์Šค ๊ฐ’๊นŒ์ง€์˜ ํ•ฉ์—์„œ a์ธ๋ฑ์Šค ๊ฐ’๊นŒ์ง€์˜ ํ•ฉ์„ ๋นผ์ฃผ๋ฉด a์™€ b ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

arr[b]๋Š” 1๋ถ€ํ„ฐ b๊นŒ์ง€์˜ ํ•ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— 1๋ถ€ํ„ฐ a-1๊นŒ์ง€์˜ ํ•ฉ์„ ๋นผ๋ฉด a์™€ b ๊ตฌ๊ฐ„์˜ ํ•ฉ๋งŒ ๋‚จ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

- ์„ฑ๋Šฅ ์ตœ์ ํ™” ํ•ด์„ค

์ฝ”๋“œ ํ•ด์„ค์—์„œ์˜ ์ฝ”๋“œ๋Š” 1576ms๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์กฐ๊ธˆ ๋” ๋น ๋ฅด๊ฒŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

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

public class Main {
    static int N, M;
    static int[] arr;

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

        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

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

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            sb.append(arr[b] - arr[a - 1]).append("\n");
        }

        System.out.print(sb.toString());
    }
}

 

์œ„์˜ ์ฝ”๋“œ๋Š” 536ms๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ์—์„œ๋Š” ์ถœ๋ ฅ์„ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•˜์—ฌ ์ถœ๋ ฅ ๋น„์šฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•˜๋ฉด์„œ I/O ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ 66%์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 


๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !

ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค <3