ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 11659 구간 합 구하기 4_Java
    코딩테스트 2024. 5. 1. 19:39

     

    문제 링크

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

     

     

    문제 풀이

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

     

     

     

     

    코드

    누적합 알고리즘을 이용하여 구간의 합을 구한다.

    여러 번 출력해야 하는 경우 BufferedWriter를 이용하여 한번에 출력하는 것이 성능이 더 좋다.

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.StringTokenizer;
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            StringTokenizer st = new StringTokenizer(bf.readLine());
            int n = Integer.parseInt(st.nextToken());
            int commendCnt = Integer.parseInt(st.nextToken());
    
            int[] arr = new int[n];
            st = new StringTokenizer(bf.readLine());
            for (int i = 0; i < n; i++) {
                arr[i] = i == 0 ? Integer.parseInt(st.nextToken()) :
                                    arr[i - 1] + Integer.parseInt(st.nextToken());
            }
    
            for(int i=0; i<commendCnt; i++){
                st = new StringTokenizer(bf.readLine());
                int start = Integer.parseInt(st.nextToken())-2;
                int end = Integer.parseInt(st.nextToken())-1;
                bw.write((start>=0 ? arr[end]-arr[start] : arr[end] )+ "\n");
            }
            bw.flush();
        }
    }

     

     

     

     

    실행 결과

Designed by Tistory.