문제 링크 : https://www.acmicpc.net/problem/11659
[ 문제 ]
수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.
[ 출력 ]
총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.
[ 예제 입력 ]
5 3
5 4 3 2 1
1 3
2 4
5 5
[ 예제 출력 ]
12
9
1
[ 풀이 ]
정말 간단한 문제였습니다.
i번째 배열마다 누적합을 넣어주고 필요한 데이터를 뽑아서 쓰면 되는 문제입니다.
[ 결과 ]
[ 정답 코드 ]
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
static int N;
static int M;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[N + 1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
arr[i] = arr[i - 1] + Integer.parseInt(st.nextToken());
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if (a == 1) {
sb.append(arr[b]).append('\n');
} else
sb.append(arr[b] - arr[a - 1]).append('\n');
}
System.out.println(sb);
}
}
'PS > BOJ' 카테고리의 다른 글
[백준 15649] N과 M (1) 자바(Java) 풀이 (0) | 2023.02.20 |
---|---|
[백준 11478] 서로 다른 부분 문자열의 개수 자바(Java) 풀이 (0) | 2023.02.19 |
[백준 1026] 보물 자바(Java) 풀이 (0) | 2023.02.17 |
[백준 11052] 카드 구매하기 자바(Java) 풀이 (0) | 2023.02.16 |
[백준 1012] 유기농 배추 자바(Java) 풀이 (0) | 2023.02.15 |
[백준 1260] DFS와 BFS 자바(Java) 풀이 (0) | 2023.02.14 |
[백준 18870] 좌표 압축 자바(Java) 풀이 (0) | 2023.02.14 |
[백준 1764] 듣보잡 자바(Java) 풀이 (0) | 2023.02.13 |