본문 바로가기
programming/알고리즘 풀이

[백준] 11659.구간 합 구하기 4 (실버3)

by 몽구스_ 2023. 3. 26.
728x90

 

[백준] 11659.구간 합 구하기 4 (실버3)

 

 

 

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번째 수까지 합을 출력한다.

 

 

[코드]

import java.util.Scanner;

public class test11659 {

    public static void main(String args[]){

        Scanner sc = new Scanner(System.in);

        int M = sc.nextInt(); //입력받을 숫자배열 수
        int N = sc.nextInt(); //입력받을 합 구간의 수 
        int[] arr = new int[M]; //이것은 숫자배열
        int[] sum = new int[M]; //이것은 합배열 : 숫자배열의 합  s[i] = s[i-1] + a[i]
        int result;

        for (int i = 0; i < M; i++) {
            arr[i] = sc.nextInt(); //숫자배열 입력 받기
            if(i == 0) sum[i] = arr[i]; //첫번째 배열에는 첫번째 수 넣어주기
            else sum[i] = arr[i] + sum[i-1]; //그 다음 배열 부터는 공식 이용하기
        }

        for (int i = 0; i < N; i++) { //합배열 끝 - 합배열 시작 = 숫자배열의 시작과 끝의 합
            int s = sc.nextInt(); //합 구간의 시작
            int e = sc.nextInt(); //합 구간의 끝
            if(s == 1) result = sum[e-1]; //합 구간의 시작 인덱스가 0이면 뺄 수가 없으니까 합배열 그대로 출력하면 됨
            else result = sum[e-1] - sum[s-2];
            System.out.println(result);
        }


    }

}

 

댓글