본문 바로가기
알고리즘 이전/do it 알고리즘 코딩테스트

11659 구간 합 구하기

by hoshi03 2023. 10. 12.

11659 구간 합 구하기

몸비틀기 느낌으로 풀었는데 인덱스를 1번부터 햇으면 편햇을 것 같다 

 

각 자리까지 배열합 = 구간합[i-1] + 배열[i]

구간합 = s[j] - s[i-1]

 

StringTokenizer를 처음 알게 되었고 잘 사용해 보자..

BuffredReader <- 입력 받을때 scanner와 비슷하지만 더 빠르다, 입력이 string으로 들어오니 int로 받을거면 변환

StringTokenizer <- split과 비슷하지만 좀더 디테일하게 사용가능한 것 같다

 

내 풀이

import java.util.*;
class Main {

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in =  new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int[] arr = new int[n];
        int[] sum = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
            if (i > 0) sum[i] = arr[i] + sum[i-1];
            else sum[i] = arr[i];
        }

        int[] res = new int[m];
        for (int i = 0; i < m; i++){
            int a = in.nextInt()-2;
            int b = in.nextInt()-1;
            if (a >= 0) res[i] = sum[b] - sum[a];
            else res[i] = sum[b];
        }

        for (int x : res) System.out.println(x);
    }
}

 

책코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
class Main {

    public static void main(String[] args) throws IOException {
        Main T = new Main();
        Scanner in =  new Scanner(System.in);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        int n = Integer.parseInt(stringTokenizer.nextToken());
        int m = Integer.parseInt(stringTokenizer.nextToken());
        int[] S = new int[n+1];
        for (int i = 1; i <= n; i++) S[i] = S[i-1] + Integer.parseInt(stringTokenizer.nextToken());

        for (int i = 0; i < m; i++){
            stringTokenizer = new StringTokenizer(bufferedReader.readLine());
            int a = Integer.parseInt(stringTokenizer.nextToken());
            int b = Integer.parseInt(stringTokenizer.nextToken());
            System.out.println(S[b] - S[a-1]);
        }
    }
}