๊ตฌ๊ฐ ํฉ
ํฉ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉํ๋ ํน์ํ ๋ชฉ์ ์ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์ด๋ ํ ๋ฐฐ์ด์ด ์์ ๋, ๊ทธ ๋ฐฐ์ด ์ค ํน์ ๋ฒ์์ ์๋ ์์ ๊ฐ๋ค์ ํฉ์ ๊ตฌ๊ฐ ํฉ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฝ๊ฒ ๊ตฌํ ์ ์์ต๋๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ๋ ค๋ฉด ํฉ ๋ฐฐ์ด์ ์์์ผ ํฉ๋๋ค.
ํฉ ๋ฐฐ์ด S์ ์ ์
๋ฐฐ์ด A๊ฐ ์์ ๋ ํฉ ๋ฐฐ์ด S๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค.
S[i] = A[0] + A[1] + A[2] + ... + A[i-1] + A[i] // A[0]๋ถํฐ A[i]๊น์ง์ ํฉ
S[4]๋ A[0]๋ถํฐ A[4]๊น์ง ๋ํ ํฉ์ธ๊ฑฐ์ฃ .
ํฉ ๋ฐฐ์ด์ ๊ธฐ์กด์ ๋ฐฐ์ด์ ์ ์ฒ๋ฆฌํ ๋ฐฐ์ด์ ๋๋ค. ์ด๋ ๊ฒ ํฉ ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ๊ตฌํด๋์ผ๋ฉด ๊ธฐ์กด ๋ฐฐ์ด์ ์ผ์ ๋ฒ์์ ํฉ์ ๊ตฌํ๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(N)์์ O(1)๋ก ๊ฐ์ํฉ๋๋ค.
์ ๊ทธ๋ฆผ์์ S[4] = A[0] + A[1] + A[2] + A[3] + A[4] = 15 + 13 + 10 + 7 + 3 =48์ ๋๋ค.
ํฉ ๋ฐฐ์ด์ S์ ๊ฐ ์์๋ฅผ ๊ตฌํ ๋ ๋งค๋ฒ ๋ค์ A[0] + ... A[i]๋ฅผ ํ๊ธฐ๋ณด๋ค๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ฐ๋ก ์ด์ ์ ๊ตฌํ S[i-1]์ A[i]๋ฅผ ๋ํ๋ ๊ฑฐ์ฃ .
๐ ํฉ ๋ฐฐ์ด ๊ณต์
S[i] = S[i-1] + A[i]
์๋ ๊ทธ๋ฆผ์์ S๋ฅผ ์ฐจ๋ก๋๋ก ๊ตฌํด๋ณด๋ฉด ์ฝ๊ฒ ์ดํด๊ฐ ๊ฐ ๊ฒ๋๋ค.
์ด๋ ๊ฒ 0๋ฒ์งธ ์ธ๋ฑ์ค๋ถํฐ ์ด๋ ์ธ๋ฑ์ค๊น์ง์ ํฉ์ ํฉ ๋ฐฐ์ด๋ก ๊ตฌํ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด 0๋ฒ์งธ๊ฐ ์๋ i๋ถํฐ j๊น์ง์ ๊ตฌ๊ฐ ํฉ์ ์ด๋ป๊ฒ ๊ตฌํ ์ ์์๊น์?
ํฉ ๋ฐฐ์ด์ ์ด์ฉํ๋ฉด ๋ฉ๋๋ค.
๐ ๊ตฌ๊ฐ ํฉ์ ๊ตฌํ๋ ๊ณต์
S[j] - S[i-1] // i์์ j๊น์ง ๊ตฌ๊ฐ ํฉ
A[2]๋ถํฐ A[4]๊น์ง์ ํฉ์ ๊ตฌํ๊ณ ์ถ๋ค๋ฉด, S[4] - S[1] = 28 - 9 = 19๋ผ๊ณ ๊ตฌํ ์ ์๋ค.
์ด์ ์ด๊ฑธ ์ด์ฉํด ๋ฐฑ์ค ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์.
11659๋ฒ
์ N๊ฐ๊ฐ ์ฃผ์ด์ก์ ๋, i๋ฒ์งธ ์๋ถํฐ j๋ฒ์งธ ์๊น์ง ํฉ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- ์ ๋ ฅ: ์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N๊ณผ ํฉ์ ๊ตฌํด์ผ ํ๋ ํ์ M์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค.์๋ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ์ ์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ํฉ์ ๊ตฌํด์ผ ํ๋ ๊ตฌ๊ฐ i์ j๊ฐ ๊ตฌํด์ง๋ค.
- ์ถ๋ ฅ: ์ด M๊ฐ์ ์ค์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง i๋ฒ์งธ ์๋ถํฐ j๋ฒ์งธ ์๊น์ง ํฉ์ ์ถ๋ ฅํ๋ค.
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int N = s.nextInt();
int M = s.nextInt();
// ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ
int[] sum = new int[N + 1];
for (int i = 1; i <= N; i++) {
sum[i] = sum[i - 1] + s.nextInt(); // ๋์ ํฉ
}
// M๋ฒ ๋์ ์
๋ ฅ ๋ฐ๋ ๋์ ์ถ๋ ฅํ๊ธฐ
for (int m = 0; m < M; m++) {
int i = s.nextInt();
int j = s.nextInt();
System.out.println(sum[j] - sum[i - 1]);
}
}
}
BufferReader์ StringTokenizer๋ฅผ ์ด์ฉํด ๋ ๋นจ๋ฆฌ ๊ตฌํ ์๋ ์์ต๋๋ค.
์ด๊ฑด ํ๋ฃจ์ฝ๋ฉ๋์ ์ฝ๋์ ๋๋ค.
import java.io.*;
class Main {
public static void main(String[] args) throws IoException {
BufferedReader bufferedReader = new BufferdReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int N = Integer.parseInt(stringTokenizer.nextToken());
int M = Integer.parseInt(stringTokenizer.nextToken());
long[] s = new long[N+1];
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
for(int i=1;i<N+1;i++) {
s[i] = s[i-1] + Integer.parseInt(stringTokenizer.nextToken());
}
for(int m=0;m<M;m++) {
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! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉ ํ ์คํธJAVAํธ ๊ฐ์ ๋ด์ฉ์ ๋๋ค.