1. ๋ฌธ์ ์ค๋ช
2. ์ ๊ทผ ๋ฐฉ์
ํด๋น ๋ฌธ์ ๋ ์ฃผ์ด์ง๋์์ ๊ฐ์๊ฐ 10^5 ๊ฐ์ด๋ค. ์ด๋ n^2๋ง ํด๋ 1์ต ๋ฒ์ ๊ณ์ฐ์ ๋์ด์, ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค. ๋ง์ฝ ๊ฐ์ ์
๋ ฅ ๋ฐ์ผ๋ฉด์, ๊ทธ ์ ์ ๋ฐ์๋ ์
๋ ฅ๋ค์ ์ผ์ผํ ์กฐํํ์ฌ ๊ตฌ๊ฐํฉ์ ๊ตฌํ๋ค๋ฉด, ์ด๋ n^2๋ก ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ค.
๋์ ํฉ ๋ฐฐ์ด์ ์ด์ฉํด ๊ตฌ๊ฐ ํฉ์ O(1) ์์ ๊ตฌํ๋ค.
- sum[] ์ด๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ ๋ค. sum[i]๋ sum[0] ~sum[i]๊น์ง์ ํฉ์ด๋ค.
sum[i] = sum[i-1] + arr[i] (ํ์ฌ๊ฐ) ์ผ๋ก ๊ตฌํ ์ ์๋ค. - i ~ j ๊น์ง์ ๊ตฌ๊ฐํฉ์ ๊ตฌํด์ผํ ๊ฒฝ์ฐ (i < j) sum[j] - sum[i-1] ํ๋ฉด ๋๋ค.
3. ์ฝ๋ ๋ถ์
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 br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st= new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int [] sum = new int [N];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++){
// ๋์ ํฉ
if(i == 0){
sum[i] = Integer.parseInt(st.nextToken());
}else{
sum[i] = sum[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())-2;
int b = Integer.parseInt(st.nextToken())-1;
sb.append(a < 0? sum[b] : (sum[b]- sum[a])).append("\n");
}
System.out.println(sb);
}
}
* ๋ด ํ์ด์ ์์ฌ์ด ์
์ด์งํผ i ~ j์ ๊ตฌ๊ฐํฉ = sum[j] - sum[i-1] ์ด๋๊น, sum[0] = 0์ผ๋ก ํ๋ ๋น์๋๊ณ , ์ง์ง ๋์ ํฉ์ ์ถ๋ฐ์ sum[1]๋ถํฐ ํ์ผ๋ฉด, ์์ด ํจ์ฌ ๊น๋ํ์ผ๋ฆฌ๋ผ ์๊ฐ์ด ๋ ๋ค. ์๋ํ๋ฉด, ArrayOutOfBound Exception์ ์๊ฐํ์ง ์๊ณ , ๊ฐ์ ๊ณ์ฐํด๋ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
4. ์ฑ์ฅ ํ๊ธฐ
sum[0] = 0๋ฅผ ๋ฃ์ด์ ์ง์ง ๋์ ํฉ start๋ sum[1]๋ก ๋๊ณ ์์ํ๋ค.
5. ๋ค์ ํ๊ธฐ
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 br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st= new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int [] sum = new int [N + 1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
sum[i] = sum[i-1] + Integer.parseInt(st.nextToken());
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
sb.append((sum[end] - sum[start - 1])).append("\n");
}
System.out.println(sb);
}
}