์ฝ๋ฉํ ์คํธ์ ๊ดํ ๊ฐ์, ์ ๋ฐ์ ์ผ๋ก ์ฐธ๊ณ ํ๊ธฐ ์ข์ ๊ธ
๋น ์ค ํ๊ธฐ๋ฒ cheat sheet ํ์ฅ์ ์ ๋ฆฌ
๋น ์คํ๊ธฐ๋ฒ์ด๋?
์ต์ ์ ์ํฉ์ ๊ฐ์ ํ๊ณ ์ฝ๋ ์คํ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํ๊ธฐํ ๊ฒ
์ฆ, ์ต์ ์ผ ๋(worst case)์ ์ฐ์ฐ ํ์๋ฅผ ๋ํ๋ธ ํ๊ธฐ๋ฒ
์ฝ๋ฉ ํ ์คํธ์์๋ ๋น -์ค ํ๊ธฐ๋ฒ(O(n))์ ๊ธฐ์ค์ผ๋ก ์ํ ์๊ฐ์ ๊ณ์ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ค์ ํ ์คํธ์์๋ 1๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ํฉ๊ฒฉ, ๋ถํฉ๊ฒฉ์ ๊ฒฐ์ ํ์ง ์์ต๋๋ค. ์์์๊ฐ ์์ฑํ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ค์ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ํํด ๋ชจ๋ ์ผ์ด์ค๋ฅผ ํต๊ณผํด์ผ๋ง ํฉ๊ฒฉ์ผ๋ก ํ๋จ ํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ฅผ ํ๋จํ ๋๋ ์ต์ ์ผ ๋ worst case ๋ฅผ ์ผ๋์ ๋ฌ์ผ ํฉ๋๋ค.
๋ค์์ ๋น -์ค ํ๊ธฐ๋ฒ(O(n))์ผ๋ก ํํํ ์๊ฐ ๋ณต์ก๋ ๊ทธ๋ํ์ ๋๋ค. ๊ฐ๊ฐ์ ์๊ฐ ๋ณต์ก๋๋ ๋ฐ์ดํฐ ํฌ๊ธฐ(N)์ ์ฆ๊ฐ์ ๋ฐ๋ผ ์ฑ๋ฅ(์ํ ์๊ฐ)์ด ๋ค๋ฅด๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ณต์ก๋๋ ํญ์ ์ต์ ์ผ ๋, ์ฆ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ํด ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
์ฐ์ฐ ํ์ ๊ณ์ฐ ๋ฐฉ๋ฒ
•์ฐ์ฐ ํ์ = ์๊ณ ๋ฆฌ์ฆ ์๊ฐ ๋ณต์ก๋ n๊ฐ์ ๋ฐ์ดํฐ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ๋์ ํ์ฌ ๋์ถ
์ ๊ณต์์ ๋์ ํด ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ด ์ด ๋ฌธ์ ์ ์ ํฉํ์ง ํ๋จํด ๋ณด๊ฒ ์ต๋๋ค.
์๊ณ ๋ฆฌ์ฆ ์ ํฉ์ฑ ํ๊ฐ
•๋ฒ๋ธ ์ ๋ ฌ = (1,000,000) 2 = 1,000,000,000,000 > 40,000,000 → ๋ถ์ ํฉ ์๊ณ ๋ฆฌ์ฆ
•๋ณํฉ ์ ๋ ฌ = 1,000,000log 2 (1,000,000) = ์ฝ 20,000,000 < 40,000,000 → ์ ํฉ ์๊ณ ๋ฆฌ์ฆ
๋ฌธ์ ์ ์ฃผ์ด์ง ์๊ฐ ์ ํ์ด 2์ด์ด๋ฏ๋ก ์ฐ์ฐ ํ์ 4,000๋ง ๋ฒ ์์ ์ํ๋ ๋ต์ ๊ตฌํด์ผ ํฉ๋๋ค.
๋ฒ๋ธ ์ ๋ ฌ์ ์ฝ 1์กฐ ๋ฒ์ ์ฐ์ฐ ํ์๊ฐ ํ์ํ๋ฏ๋ก ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ์ ์ ํฉํ ์๊ณ ๋ฆฌ์ฆ์ด ์๋๋ผ๊ณ ํ๋จํ ์ ์์ต๋๋ค.
๋ณํฉ ์ ๋ ฌ์ ์ฝ 2,000๋ง ๋ฒ์ ์ฐ์ฐ ํ์๋ก ๋ต์ ๊ตฌํ ์ ์์ผ๋ฏ๋ก ๋ฌธ์ ๋ฅผ ํ๊ธฐ์ ์ ํฉํ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ๋จํ ์ ์์ต๋๋ค.
์ด์ ๊ฐ์ด ์๊ฐ ๋ณต์ก๋ ๋ถ์์ผ๋ก ๋ฌธ์ ์์ ์ฌ์ฉํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ์ ์๊ณ , ์ด ๋ฒ์๋ฅผ ๋ฐํ์ผ๋ก ๋ฌธ์ ์ ์ค๋ง๋ฆฌ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ์ฆ, ๋ฐ์ดํฐ์ ํฌ๊ธฐ(N)๋ฅผ ๋จ์๋ก ์ฌ์ฉํด์ผ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ถ์ธกํด ๋ณผ ์ ์์ต๋๋ค.
์๊ฐ ๋ณต์ก๋๋ฅผ ๋ฐํ์ผ๋ก ์ฝ๋ ๋ก์ง ๊ฐ์ ํ๊ธฐ
์๊ฐ ๋ณต์ก๋๋ ์์ฑํ ์ฝ๋์ ๋นํจ์จ์ ์ธ ๋ก์ง logic ์ ๊ฐ์ ํ๋ ๋ฐํ์ผ๋ก๋ ์ฌ์ฉํ ์ ์์ต๋ ๋ค. ์ด ๋ถ๋ถ์ ํ์ฉํ๋ ค๋ฉด ๊ฐ์ฅ ๋จผ์ ์ฝ๋์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋์ถํ ์ ์์ด์ผ ํฉ๋๋ค. ์๊ฐ ๋ณต์ก๋๋ฅผ ๋์ถํ๋ ค๋ฉด ๋ค์ 2๊ฐ์ง ๊ธฐ์ค์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์๊ฐ ๋ณต์ก๋ ๋์ถ ๊ธฐ์ค
โ ์์๋ ์๊ฐ ๋ณต์ก๋ ๊ณ์ฐ์์ ์ ์ธํ๋ค.
โก ๊ฐ์ฅ ๋ง์ด ์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ์ ์ํ ํ์๊ฐ ์๊ฐ ๋ณต์ก๋์ ๊ธฐ์ค์ด ๋๋ค
ํฉ ๋ฐฐ์ด S ์ ์
S[i] = A[0] + A[1] + A[2] + … + A[i-1] + A[i] # A[0]๋ถํฐ A[i]๊น์ง์ ํฉ
ํฉ ๋ฐฐ์ด์ ๊ธฐ์กด์ ๋ฆฌ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฒ๋ฆฌํ ๋ฐฐ์ด์ด๋ผ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํฉ ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ๊ตฌํด ๋์ผ๋ฉด ๊ธฐ์กด ๋ฆฌ์คํธ์ ์ผ์ ๋ฒ์์ ํฉ์ ๊ตฌํ๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(N)์์ O(1)๋ก ๊ฐ์ํฉ๋๋ค. ๋ค์ ๊ทธ๋ฆผ์ ํตํด ํฉ ๋ฐฐ์ด์ ์ข ๋ ์์ธํ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค.
์ธ๋ฑ์ค
๋ฆฌ์คํธ A
ํฉ ๋ฐฐ์ด S
0 1 2 3 4 5
15 13 10 7 3 12
15 28 38 45 48 60
ํฉ ๋ฐฐ์ด
A[i]๋ถํฐ A[j]๊น์ง์ ๋ฆฌ์คํธ ํฉ์ ํฉ ๋ฐฐ์ด ์์ด ๊ตฌํ๋ ๊ฒฝ์ฐ, ์ต์ ์ ๊ฒฝ์ฐ๋ i๊ฐ 0์ด๊ณ j๊ฐ N์ธ ๊ฒฝ์ฐ๋ก ์๊ฐ ๋ณต์ก๋๋ O(N)์ ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์์์ ์์๋ณธ ํฉ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด O(1) ์์ ๋ต์ ๊ตฌํ ์ ์์ต๋๋ค. ํฉ ๋ฐฐ์ด์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋จํ ๊ณต์์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
ํฉ ๋ฐฐ์ด S๋ฅผ ๋ง๋๋ ๊ณต์
S[i] = S[i-1] + A[i]
์ถ์ฒ
https://www.bigocheatsheet.com/
์๊ฐ๋ณต์ก๋ ํ๋ฒ์ ์ ๋ฆฌํด๋ ์ฌ์ดํธ
'Python > ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] packing & unpacking ๋ฆฌ์คํธ, ํํ (0) | 2022.11.10 |
---|---|
[python] ์ผํญ์ฐ์ฐ์(Ternary operators) - ์กฐ๊ฑด๋ฌธ (0) | 2022.11.10 |
[python] ํ์ด์ฌ ๋ด์ฅํจ์ ๋ชฉ๋ก (0) | 2022.11.10 |
[python ์๋ฃ๊ตฌ์กฐ] ์งํฉ set (0) | 2022.11.07 |
[python ์๋ฃ๊ตฌ์กฐ] ๋์ ๋๋ฆฌ dictionary (0) | 2022.11.07 |