-
[Algorithm] ๋์ ํฉAlgorithm 2023. 5. 4. 15:17
๋ง์ฝ ๋ฐฐ์ด [1, 2, 3, 4, 5, 6]์์ ์ธ๋ฑ์ค 3๋ฒ์งธ ์์ ~ 5๋ฒ์งธ ์์๊น์ง์ ํฉ์ ๊ตฌํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
1. ์์ ํ์์ผ๋ก for ๋ฌธ ๋๋ฆฌ๊ธฐ
๋ฐฐ์ด์ ํฌํจ๋ ์์์ ์๊ฐ N๊ฐ์ผ ๋์ ์๊ฐ ๋ณต์ก๋๋ O(N)์ด๋ค.
int answer = 0; for (int i = 3; i < 6; i++) { answer += arr[i]; }2. psum ์ฌ์ฉํ๊ธฐ
psum์ ์ฌ์ฉํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ฅผ O(1)๋ก ์ค์ผ ์ ์๋ค.
psum์ ์๋ณธ ๋ฐฐ์ด์ ์์๋ค์ ๋์ ํฉ์ ๊ตฌํ ๋ฐฐ์ด์ด๋ค.

i = 0์ผ ๋, psum[i] = arr[i]์ผ๋ก, psum[0] = arr[0]์ด๋ค.
i = 1์ผ ๋์๋ psum[1] = arr[0] + arr[1] = psum[0] + arr[1]์ด๊ณ ,
i = 2์ผ ๋์๋ psum[2] = arr[0] + arr[1] + arr[2] = psum[1] + arr[2]์ด๊ณ ,
i = 3์ผ ๋์๋ psum[3] = arr[0] + arr[1] + arr[2] + arr[3] = psum[2] + arr[3]์ด๋ฏ๋ก,
์ต์ข ์ ์ผ๋ก psum[i] = psum[i - 1] + arr[i] (i ≥ 1)๋ผ๋ ์์ ์ป๊ฒ ๋๋ค.
๊ทธ๋ผ arr[3]์์ arr[5]๊น์ง์ ๋์ ํฉ์ ๊ตฌํ๋ ค๋ฉด ์ด๋ป๊ฒ ํ๋ฉด ๋ ๊น?

์์ ๊ฐ์ ๊ณผ์ ์ ์ํด์ ๋์จ ์์ ์ผ๋ฐํํ๋ฉด ๋ฐฐ์ด arr์ ์ด๋ค ๊ตฌ๊ฐ i, j (i ≤ j)์ ํฉ์
arr[i] + arr[i + 1] + … + arr[j - 1] + arr[j] = psum[j] - arr[i - 1]๊ณผ ๊ฐ๋ค.
์ด ๋ ๋ง์ฝ i๊ฐ 0์ผ ๊ฒฝ์ฐ psum[i - 1]์ ์๋ชป๋ ์ธ๋ฑ์ค ์ ๊ทผ์ด๋ฏ๋ก,
i๊ฐ 0์ผ ๋๋ psum[i - 1]์ 0์ด๋ผ๊ณ ๋ฐ๋ก ์ฒ๋ฆฌ๋ฅผ ๊ผญ ํด์ค์ผํ๋ค.
Swift ์ฝ๋
func partialSum(_ psum: [Int], i: Int, j: Int) -> Int { if (i == 0) { return psum[j] } return psum[j] - psum[i - 1] } var arr = [1, 2, 3, 4, 5, 6] var psum: [Int] = [] var sum = 0 for number in arr { sum += number psum.append(sum) } print(psum) // [1, 3, 6, 10, 15, 21] let partialSumResult = partialSum(psum, i: 3, j: 5) // 4 + 5 + 6 = 15 print(partialSumResult) // 15C++ ์ฝ๋
int partial_sum(int* psum, int i, int j) { if (i == 0) return psum[j]; return psum[j] - psum[i - 1]; }๊ด๋ จ ๋ฌธ์ ๋ค
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ฌ๋ผ์ด๋ฉ ์๋์ฐ (0) 2023.05.09 [Algorithm] ์ฌ๊ท (0) 2023.05.05 [Algorithm] ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ (Two Pointer Algorithm) (0) 2023.05.02 [Algorithm] ๋ฐฑ์ค 2003 ์๋ค์ ํฉ 2 (C++) (0) 2023.05.01 [Algorithm] BFS & DFS (0) 2022.03.15