[백준/자바] 11659 구간 합 구하기 4
📌 문제
수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
⚔ 입력
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.
📣 출력
총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.
💎 문제분석하기
구간 합을 구하는 문제는 배열의 순차적 진행에서 합을 구하는 방식으로 할 수 있다.
합 배열은 S[i] = S[i-1] + A[i]이다.
따라서 특정 구간까지의 합을 구하는 공식은
S[i] - S[j]로 표현된다.
1 2 3 4 5 6
--- (1)
-------------- (2)
S(2)에서 S(1)을 뺀 만큼에서 해당 구간의 합이 구해진다.
구간합을 이처럼 구하지 않고 매번을 계산한다면 최악의 경우 1억 회 이상의 연산이 수행되어 1초 이상의 수행 시간이 필요해진다.
📜 슈도코드 작성하기
N개의 배열을 받음과 동시에 합 배열을 생성한다.
S[i] = S[i-1] + A[i]
구간이 주어지면 해당 구간에 따른 공식을 쓴다.
S[j] - S[i-1]
숫자 개수 = NumberCounts
질의 개수 = QuizCounts
for 숫자 개수만큼 반복하며 합배열 생성
for 질의 개수만큼 반복하며
질의 범위를 받고
구간 합 출력
💡 코드 구현하기
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 IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int numberCounts = Integer.parseInt(stringTokenizer.nextToken());
int quizCounts = Integer.parseInt(stringTokenizer.nextToken());
long[] S = new long[numberCounts + 1]; // 0번째 것에서 -1이 되어버리니까 1번재부터 반복문을 돌리기 위해
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
// 합 배열 생성하기
for (int i = 1; i <= numberCounts; i++) {
S[i] = S[i - 1] + Integer.parseInt(stringTokenizer.nextToken());
}
// 질의 개수 만큼 돌면서 새롭게 들어오는 입력을 받고 해당 범위로 설정된 구간합 출력
for (int q = 0; q < quizCounts; q++) {
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int i = Integer.parseInt(stringTokenizer.nextToken());
int j = Integer.parseInt(stringTokenizer.nextToken());
System.out.println(S[j] - S[i - 1]);
}
}
}
풀이 참고 : Do it! 알고리즘 코딩테스트 - 자바 편
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준/자바] 10986 나머지 합 구하기 (0) | 2022.11.03 |
---|---|
[백준/자바] 11660 구간 합 구하기 5 (0) | 2022.11.02 |
[백준/자바] 1546 평균 구하기 (0) | 2022.11.02 |
백준 JAVA 문제 풀 때 유용한 템플릿 (by 류호석님) (0) | 2022.11.01 |
[백준/자바] 11720 숫자의 합 (0) | 2022.11.01 |