์ทจ์ ์ ์ํด ์ฝ๋ฉํ ์คํธ๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ค๋นํ๊ธฐ ์ , "ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ"์ด๋ ๋ฌด์์ธ๊ฐ์ ๋ํ ๊ณ ๋ฏผ์ ํด๋ณด์๋ค. ์๋ ๊ธ์ ์ฌ๋ฌ ๋ธ๋ก๊ทธ์ ์ธํ๋ฐ์ 'Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉํ ์คํธ with JAVA' ๊ฐ์๋ฅผ ๋ณด๊ณ ๋ด๋ฆฐ ๋ต์ด๋ค.
์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๋ค๋ ๊ฒ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ฏผํ๋ค๋ ๊ฒ๊ณผ ๊ฐ์ ๋ง์ด๋ค.
๐์๊ฐ๋ณต์ก๋
"๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ก์ง์ ์ฝ๋๋ก ๊ตฌํํ ๋, ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ๋ค๋ ๊ฒ"์ ๋ฌด์จ ์๋ฏธ์ผ๊น?
์ ๋ ฅ๊ฐ์ ๋ณํ์ ๋ฐ๋ผ ์ฐ์ฐ์ ์คํํ ๋ ์ฐ์ฐ ํ์์ ๋นํด ์๊ฐ์ด ์ผ๋ง๋งํผ ๊ฑธ๋ฆฌ๋๊ฐ๋ฅผ ๊ณ ๋ คํ๋ค๋ ์๋ฏธ๋ผ๊ณ ํ์๋ ์๊ฐํ๋ค. ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ์๋ค๋ ๊ฒ์ ๋ค์ ๋งํด ์ ๋ ฅ ๊ฐ์ด ์ปค์ง์ ๋ฐ๋ผ ์ฆ๊ฐํ๋ ์๊ฐ์ ๋น์จ์ ์ต์ํํ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌ์ฑํ์๋ค๋ ์ด์ผ๊ธฐ์ด๋ค.
๐Big-O ํ๊ธฐ๋ฒ
์๊ฐ ๋ณต์ก๋๋ฅผ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ์๋ Big-O, Big-Ω, Big-θ๊ฐ ์๋ค.
- Big-O(๋น -์ค) : ์ต์ ์ผ ๋(worst case)์ ์ฐ์ฐ ํ์๋ฅผ ๋ํ๋ธ ํ๊ธฐ๋ฒ
- Big-Ω(๋น -์ค๋ฉ๊ฐ) : ์ต์ ์ผ ๋(best case)์ ์ฐ์ฐ ํ์๋ฅผ ๋ํ๋ธ ํ๊ธฐ๋ฒ
- Big-θ(๋น -์ธํ) : ์ต์ ๊ณผ ์ต์ ์ ํ๊ท (average case)
์ด ์ค Big-O ํ๊ธฐ๋ฒ์ด ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋๋ฐ(์ฝ๋ฉ ํ ์คํธ์์๋ ์ญ์ Big-O ํ๊ธฐ๋ฒ ์ฌ์ฉ), ์ด๋ ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ฌ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๊ณผ์ ์์ ์์๋๋ "์ต๋ ์๊ฐ"์ ๊ตฌํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
(1) O(1)
์ผ์ ํ ๋ณต์ก๋(constant complexity)๋ผ๊ณ ํ๋ฉฐ, ์ ๋ ฅ ๊ฐ์ด ์ฆ๊ฐํ๋๋ผ๋ Time์ด ๋์ด๋์ง ์๋๋ค. ๋ค์ ๋งํด, input์ ํฌ๊ธฐ์ ๊ด๊ณ ์์ด, ์ฆ์ output์ ์ป๋๋ค๋ ์๋ฏธ์ด๋ค.
(2) O(log n)
๋ก๊ทธ ๋ณต์ก๋(logarithmic complexity)๋ผ๊ณ ํ๋ฉฐ, Big-O ํ๊ธฐ๋ฒ ์ค O(1) ๋ค์์ผ๋ก ๋น ๋ฅธ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
(3) O(n)
์ ํ ๋ณต์ก๋(linear complexity)๋ผ๊ณ ํ๋ฉฐ, ์ ๋ ฅ ๊ฐ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๊ฐ ๋ํ "๊ฐ์ ๋น์จ"๋ก ์ฆ๊ฐํ๋ค.
(4) O(n^2)
2์ฐจ ๋ณต์ก๋(quadratic complexity)๋ผ๊ณ ํ๋ฉฐ, ์ ๋ ฅ ๊ฐ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๊ฐ์ด n์ ์ ๊ณฑ์์ ๋น์จ๋ก ์ฆ๊ฐํ๋ค.
(5) O(2^n)
๊ธฐํ๊ธ์์ ๋ณต์ก๋(exponential complexity)๋ผ๊ณ ํ๋ฉฐ, Big-O ํ๊ธฐ๋ฒ ์ค ๊ฐ์ฅ ๋๋ฆฐ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๐์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๊ธฐ์ค์ผ๋ก ํ์ฉํ๊ธฐ
์ฝ๋์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋์ถํ๊ณ , ์ดํ ์ ์ฒด ์ฐ์ฐ ํ์๋ฅผ ๊ณ์ฐํ๋ค.
์ฐ์ฐ ํ์ = ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋ X ๋ฐ์ดํฐ์ ํฌ๊ธฐ
๋ฐ์ดํฐ์ ํฌ๊ธฐ์ ์๊ณ ๋ฆฌ์ฆ ์ข ๋ฅ์ ๋ฐ๋ผ ์ฝ๋๊ฐ ์ต์ข ์ ์ผ๋ก ์ ํฉํ์ง, ์๋์ง๊ฐ ๊ฒฐ์ ๋๋ค. ์ค์ ์ฝ๋ฉ ํ ์คํธ์์ ํ ์คํธ ์ผ์ด์ค๋ ๋ชจ๋ ํต๊ณผํ์์ผ๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ ๊ฒฝ์ฐ, ์ด ์๋ฆฌ๋ฅผ ๋ฐํ์ผ๋ก ๋ฌธ์ ๊ฐ ๋๋ ์ฝ๋ ๋ถ๋ถ(์ฃผ๋ก ๋ฐ๋ณต๋ฌธ)์ ๋์ถํ ์ ์๋ค.