728x90

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

 

11659번: 구간 합 구하기 4

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

www.acmicpc.net

 

문제)

 

 

 

풀이)

당연히 가장 쉬운 것은 배열을 입력받아 구간 합을 구하는 것이지만, 당연히 시간 초과가 난다.

따라서 입력을 받으면서 더해가는 방식으로 진행했다.

일차원 배열이므로 누적합을 구하는건 간단하다!

 

결국 구간 합을 구하기 위해선 마지막 인덱스까지 구한 누적 합 - 처음 인덱스까지 구한 누적 합으로 작성하면 된다!

 

원래 입력받은 배열

1 2 3 4 5 6 7 8

 

 

누적합

1 3 6 10 15 21 28 36

 

3 ~ 7까지 구간합

1 3 6 10 15 21 28 36

28 - 6 = 22

 

 

import java.util.Scanner;

public class Main_BJ_11659_구간합구하기4 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		
		int[] arr = new int[N+1];
		//누적합 구하기
		for(int i=1; i<=N; i++) {
			arr[i] = arr[i-1] + sc.nextInt();
		}
			
		for(int i =0; i<M; i++) {
			int start = sc.nextInt();
			int end = sc.nextInt();
			System.out.println(arr[end]-arr[start-1]);
		}
		
		sc.close();

	}

}
728x90

'코테 > 백준' 카테고리의 다른 글

백준 2164. 카드2(JAVA)  (0) 2022.08.16
백준 11660 구간 합 구하기 5(JAVA)  (0) 2022.08.09
백준 17478. 재귀함수가 뭔가요?(JAVA)  (0) 2022.08.07
백준 1244. 스위치켜고끄기(JAVA)  (0) 2022.08.07
백준 2615 오목(JAVA)  (0) 2022.08.02

+ Recent posts