
๋์ ํฉ (Prefix Sum)
๋์ ํฉ์ด๋?
- ๋ฐฐ์ด์ ์ธ๋ฑ์ค๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๊ทธ ๋์ ๋ ํฉ์ ๋ฏธ๋ฆฌ ๊ตฌํด ๋๋ ๊ฒ, '์ ์ฒ๋ฆฌ' ๋ผ๊ณ ๋ ํจ.
- arr๋ฐฐ์ด์ ์ผ์ผํ for๋ฌธ์ผ๋ก ๋๋ฉด์ ํฉ์ ๊ตฌํ๋ฉด ๋๋๊ฒ ์๋๊ฐ๋ ์๋ฌธ์ ๋์ง ์ ์๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ์๊ฐ๋ณต์ก๋ ์ธก๋ฉด์์ ์ฑ๋ฅ์ด ์ ํ๋๋ค. (ํ ์คํธ์ผ์ด์ค์์ ์๊ฐ์ด๊ณผ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ๋ ํจ..) ๊ทธ๋ฌ๋ฏ๋ก ๋์ ํฉ์ ๋ฏธ๋ฆฌ ๊ตฌํ์ฌ ์ฌ์ฉํ๋ค.
๋์ ํฉ ๊ตฌํ
- ํฌ๊ธฐ๊ฐ 10์ธ arr ๋ฐฐ์ด์ ๋์ ํฉ์ ๊ตฌํด๋ณด์

1. ๋์ ํฉ์ผ๋ก [a] ~ [b] ์ ํฉ์ ๊ตฌํ๊ธฐ.
" acc [ b ] - acc [ a - 1 ] "
2. acc๋ฐฐ์ด์ ์ฑ์ฐ๊ธฐ
์ธ๋ฑ์ค 0 ์ผ๋๋ arr[0] ๊ทธ ์์ฒด๊ฐ ๋๋ค.
๊ทธ ์ดํ๋ถํฐ๋ acc[i] = acc[i-1] + arr[i]
" acc[0]=arr[0] "
" acc[i] = acc[i-1] + arr[i] "
for(int i=0;i<n;i++) {
if(i==0) {
acc[i]=arr[i];
}
else {
acc[i]=acc[i-1]+arr[i];
}
}
์์
Q. ๋ฐฐ์ด์ ํฌ๊ธฐ n์ธ ๋ฐฐ์ด์ n๊ฐ์ ์์ ๊ฐ์๋ฅผ ์
๋ ฅ ๋ฐ๊ณ ,
๋ฌผ์์ ํ์ m์ ์
๋ ฅ ๋ฐ๊ณ , ์์์ (a,b)๋ m๊ฐ ๋ค์ด์ฌ๋,
a~b์ ํฉ์ ๊ตฌํ์์ค.
A.
์์์ ์ธ๋ฑ์ค๋ฅผ ํฌํจํ์ฌ ๋ฐฐ์ด์์์ ํฉ์ ๊ตฌํ๋ฉด ๋๋ค.
์ด๋ ๋์ ํฉ์ ์ฌ์ฉํ๋ฉด ์ด๋ ๊ฒ ํ ์ ์๋ค.
package com.com.practice;
import java.util.Scanner;
class Info{
int a;
int b;
}
public class Main {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
int n= sc.nextInt();
int arr[]=new int[n];
int acc[]=new int[n];
//arr,acc ์
๋ ฅ๋ฐ๊ธฐ
for(int i=0;i<n;i++) {
arr[i]=sc.nextInt();
if(i==0) {
acc[i]=arr[i];
}
else {
acc[i]=acc[i-1]+arr[i];
}
}
int m = sc.nextInt();
//์์์ a,b ์
๋ ฅ๋ฐ๊ธฐ
Info[] info = new Info[m];
for(int i=0;i<m;i++) {
info[i]=new Info();
info[i].a=sc.nextInt();
info[i].b=sc.nextInt();
}
for(int i=0;i<m;i++) {
if((info[i].a)==0) {
System.out.println(i+1+"๋ฒ์งธ ํฉ: "+ acc[info[i].b]);
}
else System.out.println(i+1+"๋ฒ์งธ ํฉ: "+ (acc[info[i].b]-acc[info[i].a-1]));
}
return;
}
}
+
๊ฐ์ฒด ๋ฐฐ์ด์ ์ ์ธ ๋ฐ ์์ฑ ๋ฐฉ๋ฒ
Book ๊ฐ์ฒด 3๊ฐ๋ฅผ ๋ฐฐ์ด ํํ๋ก ๋ง๋ค์ด ์ฌ์ฉํ๊ธฐ ์ํด์ ๋จผ์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด,
๋ ํผ๋ฐ์ค ๋ณ์ b์ Book ๊ฐ์ฒด์ ๋ํ ๋ ํผ๋ฐ์ค ๋ณ์ 3๊ฐ๊ฐ ์์ฑ๋ฉ๋๋ค.
Book[ ] b = new Book[3];
์ด๋ ๊ฒ ์ ์ธํ๊ฒ ๋๋ฉด Book ๊ฐ์ฒด๋ฅผ ๋ด์ ๋ ํผ๋ฐ์ค ๋ณ์ 3๊ฐ๊ฐ ๋ฐฐ์ดํํ๋ก ์์ฑ๋ฉ๋๋ค.
์ฃผ์ํ ์ ์ ์์ง Book ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์, Book ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ด Book ๊ฐ์ฒด๋ฅผ ์์ฑํด ์ฃผ์ด์ผ ํฉ๋๋ค.
b[0] = new Book( );
b[1] = new Book( );
b[2] = new Book( );
์ถ์ฒ: https://kadosholy.tistory.com/90 [KADOSHoly:ํฐ์คํ ๋ฆฌ]
'๐ป > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ์ฌ๋ผ์ด๋ฉ ์๋์ฐ(Sliding Window) (0) | 2024.10.28 |
---|---|
ํผ๋ณด๋์น ์์ด ๊ตฌํํ๊ธฐ (0) | 2024.07.22 |