백준_11659번_구간 합 구하기 4_자바 풀어보도록 하겠습니다.
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
해당 문제는 문제 자체에 어려움은 없으나,
제한 부분을 보시면 아래와 같이 범위가 넓어서 2중 for문으로 풀이시 시간 초과가 나타나는 함정이 있습니다.
- 1 ≤ N ≤ 100,000
- 1 ≤ M ≤ 100,000
- 1 ≤ i ≤ j ≤ N
시간 초과만 유의하여 최초에 값을 받을때 배열에 이전 칸들의 합을 저장하는 합배열을 만들어 주시면 쉽게 풀이가 가능합니다.
풀이 소스는 아래를 참고 바랍니다.
import java.util.*;
import java.io.*;
public class Main {
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());
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(st.nextToken());
int 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());
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
sb.append(arr[b]-arr[a-1]+"\n");
}
System.out.println(sb);
}
}
'CodingTest' 카테고리의 다른 글
백준_1789번_수들의 합_자바 (1) | 2024.01.22 |
---|---|
백준_11724번_연결 요소의 개수_자바 (0) | 2024.01.18 |
백준_2644번_촌수계산_자바 (2) | 2024.01.09 |
백준_2839_설탕 배달_자바 (1) | 2024.01.05 |
백준_1018번_체스판 다시 칠하기_자바 (2) | 2024.01.04 |