Java

[백준 11659] 구간 합 구하기 4 (JAVA)

iheeeee6-6 2023. 3. 9. 14:07
728x90

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

 

11659번: 구간 합 구하기 4

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

www.acmicpc.net

 

자신의 위치까지의 합을 구한 배열을 사용하여 문제를 해결할 수 있다.

 

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 NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int m= Integer.parseInt(st.nextToken());
		
		int[] arr = new int[n];
		int[] sum = new int[n];
		st = new StringTokenizer(br.readLine());
		for(int i=0;i<n;i++) {
			arr[i] = Integer.parseInt(st.nextToken());
			if(i==0)
				sum[i]=arr[i];
			else {
				sum[i]=sum[i-1]+arr[i];
			}
		}
		
		StringBuilder sb = new StringBuilder();
		for(int i=0;i<m;i++) {
			st = new StringTokenizer(br.readLine());
			int start = Integer.parseInt(st.nextToken());
			int end = Integer.parseInt(st.nextToken());
			if(start==end) {
				sb.append(arr[end-1]).append("\n");
			}
			else if(start==1){
				sb.append(sum[end-1]).append("\n");
			}
			else {
				sb.append(sum[end-1]-sum[start-2]).append("\n");
			}
		}
		System.out.println(sb);
	}

}