알고리즘/백준문제풀이

백준 11659 구간 합 구하기4 / JAVA

테토 2023. 11. 27. 21:36
반응형

 

분류

누적 합

제출 일자

2023년 11월 27일 21:25:16

문제 설명

수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.

출력

총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.

 

 

 

 

전에 풀었던 문제인데 Scanner 대신 BufferedReader를 사용해서 풀었다. 

 

알고리즘은 동일하다. 

 

 

bf사용해서 입력받고 입력받으면서 합 구해서 합배열 바로 생성함

 

입력받는 동시에 구간합 알고리즘으로 답 구한 후 result 배열에 저장함

구간 시작이 1로 들어올 경우 arr[k] - arr[-1]이 돼서 오류가 나므로 이 경우만 예외처리함

 

 

전체 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(bf.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int[] arr = new int[n];
        int[] result = new int[m];


        st = new StringTokenizer(bf.readLine());
        arr[0] = Integer.parseInt(st.nextToken());
        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(bf.readLine());
            int j = Integer.parseInt(st.nextToken()) - 1;
            int k = Integer.parseInt(st.nextToken()) - 1;

            if (j == 0) {
                result[i] = arr[k];
            } else {
                result[i] = arr[k] - arr[j - 1];
            }
        }

        for (int i = 0; i < m; i++) {
            System.out.println(result[i]);
        }
    }
}

 

 

성능 요약

메모리: 61296 KB, 시간: 1420 ms

 

 

 

반응형