본문 바로가기

백준/Java

[JAVA] 구간 합 구하기 4

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

 

 

접근

import java.util.*;
import java.io.*;
public class Solve11659 {
    public static void main(String[] args) throws IOException{
        Scanner sc = new Scanner(System.in);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        //데이터의 개수, 질의 개수 입력
        int dataCount = sc.nextInt();
        int question = sc.nextInt();

        //구간합 배열 생성 후, 정의
        int sumData [] = new int [dataCount];

        //구한 합을 구할 대상 배열 값 입력 (데이터 개수 만큼 반복)
        int [] dataSet = new int[dataCount];
        dataSet[0] = sc.nextInt();
        sumData[0] = dataSet[0];
        for(int i = 1 ; i< dataCount; i++){
            dataSet[i] = sc.nextInt();
            sumData[i] = sumData[i-1] + dataSet[i];
        }
        //질의 입력
        for(int i = 0; i<question; i++){
            int firstIdx = sc.nextInt();
            int lastIdx = sc.nextInt();
            //입력받은 구간합 구하고 출력.
            if(firstIdx == 1)
                bw.write(sumData[lastIdx-1] + "\n");
            else
                bw.write(sumData[lastIdx-1] - sumData[firstIdx-2] + "\n");
        }
        bw.flush();
        bw.close();
    }
}

 

 

개선 가능한 부분

입력을 받을때, Scanner 클래스 대신 BufferedReader 클래스를 사용하면 보다 더 효율적이다.

dataSet[] 배열은 없어져도 지장이 없고, sumData[] 배열만으로도 누적합 계산이 가능하다.

보통, 구간합은 sum[0] = 0으로 두고, sum[i] = sum[i-1] + data[i] 형식이 더 직관적이고 실수를 줄일 수 있는 방법이다.