본문 바로가기
Algorithm/백준

[Algorithm][JAVA] 백준 11659번: 구간 합 구하기 4

by 8희 2022. 5. 21.

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

 

11659번: 구간 합 구하기 4

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

www.acmicpc.net

 


문제

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

 

입력

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다.

둘째 줄에는 N개의 수가 주어진다.

수는 1,000보다 작거나 같은 자연수이다.

셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.

 

출력

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

 

제한

  • 1 ≤ N ≤ 100,000
  • 1 ≤ M ≤ 100,000
  • 1 ≤ i ≤ j ≤ N

코드

import java.util.*;

public class Main {
	public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); //수의 개수 n
        int m = sc.nextInt(); //합을 구해야 하는 횟수 m
        
        int arr[] = new int[n]; //n개의 수를 저장하는 배열
        int sum_arr[] = new int[n + 1]; //i번째 수부터 j번쩨 수까지 합을 저장하는 배열
        
        for (int l = 0; l < n; l++) {
        	arr[i] = sc.nextInt(); //n개의 수 입력 받기
            	sum_arr[i + 1] += sum_arr[i] + arr[i];
        }
        
        for (int l = 0; l < m; l++) { 
        	int i = sc.nextInt(); //합을 구해야 하는 구간 i
            	int j = sc.nextInt(); //합을 구해야 하는 구간 j
            
            //m개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합 출력
            System.out.println(sum_arr[j] - sum_arr[i - 1];
        }
}

배열을 이용하면 쉽게 풀 수 있을 줄 알았는데 sum_arr 배열 선언 및 사용에서 시간이 좀 오래 걸렸다.

그런데도 코드가 조금 이상해서 구글링을 통해서 14번째 줄은 조금 수정을 한 후에 코드 작성을 완료할 수 있었다...