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);
}
}
}
'programming > 알고리즘 풀이' 카테고리의 다른 글
[leetcode] 42. Trapping Rain Water (0) | 2021.10.06 |
---|---|
[leetcode] 49. Group Anagrams (0) | 2021.10.06 |
[leetcode] 1. Two Sum (0) | 2021.10.02 |
[백준(Baekjoon)] 14235. 크리스마스 선물 (0) | 2021.08.27 |
[백준(Baekjoon)] 1260. DFS와 BFS (0) | 2021.08.26 |
댓글