μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- κ·Έλννμ
- μμνμ
- ꡬν
- λ³ν©μ λ ¬
- DFS
- BFS
- ν°μ€ν 리μ±λ¦°μ§
- λ€μ΄λλ―Ήνλ‘κ·Έλλ°
- skala
- λ¨Έμ§μνΈ
- SQL
- λ°±μ€
- μν
- λμ κ³νλ²
- νμ΄μ¬
- λμ ν©
- db
- SK
- 그리λ
- LIS
- νλ‘κ·Έλλ¨Έμ€
- κΉμ΄μ°μ νμ
- μκ³ λ¦¬μ¦
- DP
- λ°μ΄ν°λ² μ΄μ€
- λλΉμ°μ νμ
- μ λ ¬
- μ€λΈμ
- skala1κΈ°
- κ·Έλν
- Today
- Total
πππ°πΈ π£πΆπ΅ π΄π΅π¦π’π₯πΊ
[μκ³ λ¦¬μ¦] λμ ν©(prefix sum) λ³Έλ¬Έ
1. λμ ν©(prefix sum)
1.1 κ°λ
νΉμ λ°°μ΄μμ μ΄λ ν ꡬκ°κΉμ§μ ν©μ ꡬνλ λ°©μ. μ΄λ ν 1μ°¨μ λ°°μ΄ [ 1, 5, 2, 10, 1, 8 ] μμ κ°μ₯ ν©μ΄ ν° κΈΈμ΄κ° 3μΈ λΆλΆ λ°°μ΄μ κ³ λ₯Ό λ, [ 1, 5, 2 ], [ 5, 2, 10 ], ... , [ 10, 1, 8 ] μ νλνλμ© λ°λ³΅λ¬Έμ λλ €λκ°λ©΄μ λΉκ΅ν΄ λκ°λ κ²μ΄ μλλΌ λ―Έλ¦¬ λμ ν©μ κ³μ°ν΄λ λ°°μ΄ [ 1, 6, 8, 18, 19, 27 ] λ₯Ό νμ©νμ¬ κ³μ°μ νκΈ° λλ¬Έμ, κ³μ°λμμ ν° μ΄λμ΄ μλ€.
1.2 1μ°¨μ λ°°μ΄
μκ³ λ¦¬μ¦ μλ λ°©μμ λ€μκ³Ό κ°λ€.
1. κΈΈμ΄κ° N(λλ N + 1)μ λμ ν© λ°°μ΄μ μ μΈνκ³ , κ° λμ ν© λ°°μ΄μ iλ²μ§Έ μΈλ±μ€μλ μλ³Έ λ°°μ΄μ 1λ²μ§ΈλΆν° iλ²μ§Έ μμμ ν©μ μ μ₯νλ€.
2. aλ²μ§Έ μμλΆν° bλ²μ§Έ μμ(1 β€ a β€ b β€ N)κΉμ§μ λμ ν©μ ꡬνκ³ μΆμ λ, ꡬνλ λ°©μμ
bλ²μ§Έ λμ ν© κ°μμ (a - 1)λ²μ§Έ λμ ν© κ°μ λΉΌμ ꡬνλ€.

κ·Έλ¦Όμ μμμ κ°μ λ°°μ΄μμ
3λ²μ§Έ μμ(6)μμ 6λ²μ§Έ μμ(1)κΉμ§μ λμ ν©μ ꡬνλ λ°©λ²μ
prefix_sum[5] - prefix_sum[1] = 23 - 6 = 17

[a]λΆν° [b]κΉμ§μ ν©μ 1 ~ bκΉμ§μ ν©μμ κ²ΉμΉλ λΆλΆμΈ 1 ~ (a-1) μ λΉΌμ£Όλ©΄ λκΈ° λλ¬Έμ,
미리 μ μλ λ°°μ΄λ§ μμΌλ©΄ O(1)λ§μ κ³μ°μ΄ κ°λ₯ν κ°λ¨ν μ리μ μκ³ λ¦¬μ¦μ΄λ€.
1.2.1 μ½λ
int N, a, b; // predefined
vector<int> A(N); // predefined
vector<int> prefix_sum(N + 1, 0);
for(int i = 1; i <= N; i++) {
prefix_sum[i] = prefix_sum[i - 1] + A[i - 1];
}
// a ~ bκΉμ§ ꡬκ°ν©
sum = prefix_sum[b + 1] - prefix_sum[a];
1.3 2μ°¨μ λ°°μ΄
μ¬μ€ μ΄ ν¬μ€ν μ νκ² λ건 2μ°¨μ λ°°μ΄μ λμ ν© λλ¬Έμ...
2μ°¨μ λ°°μ΄μμμ λμ ν©μ 1μ°¨μ λ°°μ΄μμμ μ리μ λμΌνλ€.
λ€λ§, λμ ν© λ°°μ΄μ λ§λ€μ΄μ£Όλ λ°©μμμλΆν° μ‘°κΈ μκ°μ ν΄μ€μΌ νλ€.
2μ°¨μ λ°°μ΄μ λμ ν© λ°°μ΄μ λ§λ€μ΄ μ€λλ (0, 0) ~ (i, j) κΉμ§μ μ§μ¬κ°ν λ°°μ΄ λ΄ λμ ν©μ ꡬν΄μ€λ€λ μκ°μΌλ‘ κ³μ°μ ν΄μ£Όλ©΄ λλ€.
(0, 0) ~ (i, j)κΉμ§μ λμ ν©μ λ€μκ³Ό κ°μ΄ ꡬνλ€.
[ (0, 0) ~ (i, j - 1)κΉμ§μ λμ ν© + (0, 0) ~ (i - 1, j)κΉμ§μ λμ ν© + (i, j)μ λ°°μ΄κ° ] - [ (0, 0) ~ (i - 1, j - 1)κΉμ§μ λμ ν© ]
κ·Έλ¦¬κ³ (a, b) ~ (c, d) μ¬μ΄μ λμ ν©μ λ€μκ³Ό κ°μ΄ ꡬνλ€.
[ (c, d)κΉμ§μ λμ ν© + (a - 1, b - 1)κΉμ§μ λμ ν© ] - [ (a - 1, d)κΉμ§μ λμ ν© + (c, b - 1)κΉμ§μ λμ ν©) ]
λ€μκ³Ό κ°μ΄ 0κ³Ό 1λ‘ μ΄λ£¨μ΄μ§ λ°°μ΄ A[][]κ° μλ€κ³ ν λ, (3, 2)κΉμ§μ λμ ν©μ 3μ΄ λλ€.

λμ ν© λ°°μ΄μμ (3, 2)λ₯Ό μ΄λ£¨λ κ°μ λ€μκ³Ό κ°μ΄ ꡬνλ€.

1οΈβ£ (0, 0) ~ (3, 1) κΉμ§μ λμ ν©
+ 2οΈβ£ (0, 0) ~ (2, 2) κΉμ§μ λμ ν©
+ 3οΈβ£ (3, 2)μμμ λ°°μ΄ κ°(μ¬κΈ°μλ 0)
- 4οΈβ£ κ²ΉμΉλ ꡬκ°((0, 0) ~ (2, 1) κΉμ§μ λμ ν©)
μ λͺ¨λ κ³μ°ν΄μ£Όλ©΄ 1οΈβ£ 2 + 2οΈβ£ 2 + 3οΈβ£ 0 - 4οΈβ£ 1 = 3 μ΄ λλ€.
μ΄λ° μμΌλ‘ λμ ν© λ°°μ΄μ λͺ¨λ κ³μ°ν΄μ£Όλ©΄ λ€μκ³Ό κ°λ€. (μ μ μμ)

κ·ΈλΌ μ¬κΈ°μ (a, b) ~ (c, d) κΉμ§μ λμ ν©μ ꡬνλ λ°©μμ μμ λ°©μκ³Ό λ§μ°¬κ°μ§λ‘ λ€μκ³Ό κ°μ΄ ꡬνλ€.
(3, 1) ~ (6, 5) κΉμ§μ λμ ν©μ΄ κΆκΈν λ,

1οΈβ£ (0, 0) ~ (6, 5) κΉμ§μ λμ ν©
+ 2οΈβ£ λλ² λΉΌμ§λ ꡬκ°((0, 0) ~ (2, 0) κΉμ§μ λμ ν©)
- 3οΈβ£ (0, 0) ~ (2, 5) κΉμ§μ λμ ν©
- 4οΈβ£ (0, 0) ~ (6, 0) κΉμ§μ λμ ν©
μ λͺ¨λ κ³μ°ν΄μ£Όλ©΄ 1οΈβ£ 5 + 2οΈβ£ 0 - 3οΈβ£ 2 - 4οΈβ£ 0 = 3 μ΄ λλ€.
1.3.1 μ½λ
int N, a, b, c, d; // predefined
vector<vector<int>> A(N, vector<int>(N)); // predefined
vector<vector<int>> prefix_sum(N, vector<int>(N + 1, 0));
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
prefix_sum[i][j] = A[i - 1][j - 1] + prefix_sum[i][j - 1]
+ prefix_sum[i - 1][j] - prefix_sum[i - 1][j - 1];
sum = prefix_sum[c + 1][d + 1] - prefix_sum[a][d]
- prefix_sum[c][b] + prefix_sum[a][b]
λμ ν© μ¬μ©ν΄μ νμ΄μΌνλ λ¬Έμ
π ꡬλ¦-λμ΄κ³΅μ
'μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μκ³ λ¦¬μ¦] μ΄λΆ νμ(Binary Search) (0) | 2021.08.08 |
---|---|
[μκ³ λ¦¬μ¦] κ·Έλν μν λ¬Έμ - 2. λλΉ μ°μ νμ(BFS) (0) | 2021.07.22 |
[μκ³ λ¦¬μ¦] κ·Έλν μν λ¬Έμ - 1. κΉμ΄ μ°μ νμ(DFS) (0) | 2021.07.21 |
[μκ³ λ¦¬μ¦] μ λ ¬ - 2. ν΅ μ λ ¬(Quick Sort) (0) | 2021.07.15 |
[μκ³ λ¦¬μ¦] μ λ ¬ - 1. λ³ν© μ λ ¬(Merge Sort) (0) | 2021.07.14 |