[์๋ฃ๊ตฌ์กฐ] ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ
๐ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ (๋ตํด๋ณด๊ธฐ)
Q. ์๋ฃ๊ตฌ์กฐ์ ์ ์์ ์ค์ํ ์ด์ ๋ฅผ ์ค๋ช ํ์ธ์.
A. ๋ง ๊ทธ๋๋ ์๋ฃ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ = ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ๋ ํ๋ ๊ตฌ์กฐ
๋ฌธ์ ์ ํด๊ฒฐ์ ์ํด ์ฌ๋ฌ ๊ฐ์ง ํํ์ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ฉ๋๋ค.
- ํํ์ ๋ฐ๋ผ ์ฅ๋จ์ ์ด ์กด์ฌํ๋ค.
- ํ๋ก๊ทธ๋จ์์ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ ์ํด ์ ์ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ผ ์ข์ ์ฑ๋ฅ์ ๋ผ ์ ์๋ค.
Q. ์๋ฃ๊ตฌ์กฐ๋? / ์๊ณ ๋ฆฌ์ฆ์ด๋?
A. ์๋ฃ๊ตฌ์กฐ : ๋ฐ์ดํฐ๋ฅผ ์ด๋ ํ ํํ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ๊ฒ์ธ์ง์ ๋ํ ๋ฐฉ๋ฒ.
→ ๊ทธ๋์ ์๋ฃ๊ตฌ์กฐ๋ ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ์๋ฃ๋ฅผ ์ ์ฅํ ๊ฒ์ธ๊ฐ์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํ๋ค
์๊ณ ๋ฆฌ์ฆ : ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ฑฐ๋ ๋ณํํ๊ฑฐ๋ ์์ ํ ๋ ํ์ํ ๋ฐฉ๋ฒ.
→ ๊ทธ๋์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ ์ฐจ์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํ๋ค.
Q. ์๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ์ ์ข ๋ฅ์ ๋ํด ์ด์ผ๊ธฐํด๋ณด์ธ์.
A. List(๋ฆฌ์คํธ), Linked List(๋งํฌ๋ ๋ฆฌ์คํธ), Array(๋ฐฐ์ด), Stack(์คํ), Queue(ํ), Dequeue(๋ํ), Tree(ํธ๋ฆฌ),
Heap(ํ), Graph(๊ทธ๋ํ)
Q. ๋น ์ค ํ๊ธฐ๋ฒ์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
A. ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ํ๊ธฐํด์ฃผ๋ ํ๊ธฐ๋ฒ. ๋ณดํต ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
์๋ฃ๊ตฌ์กฐ๋ ๋ฌด์์ธ๊ฐ?
๋ง ๊ทธ๋๋ ์๋ฃ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ๋ก, ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ๋ ํ๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ.
- ๋ฌธ์ ์ ํด๊ฒฐ์ ์ํด ์ฌ๋ฌ ๊ฐ์ง ํํ์ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ฉ๋๋ค.
- ํํ์ ๋ฐ๋ผ ์ฅ๋จ์ ์ด ์กด์ฌํ๋ฉฐ, ๊ตฌํํ๊ณ ์ ํ๋ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ๊ณ ๋ คํ์ฌ ์๋ง์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํํด์ผ ํ๋ค.
- ์๋ฃ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ด๊ธฐ ์ํด ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์ฐ๋ฉฐ, ํ๋ก๊ทธ๋จ์์ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ ์ํด ์ ์ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ผ ์ข์ ์ฑ๋ฅ์ ๋ผ ์ ์๋ค.
์๋ฃ๊ตฌ์กฐ์ ๋ถ๋ฅ
- ๋จ์ ๊ตฌ์กฐ : ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
- ์ ํ ๊ตฌ์กฐ : ์ ์ฅ๋๋ ์๋ฃ์ ์ ํ๊ด๊ณ๊ฐ 1:1 (๋ฆฌ์คํธ, ์คํ, ํ)
- ๋น์ ํ ๊ตฌ์กฐ : ๋ฐ์ดํฐ ํญ๋ชฉ ์ฌ์ด์ ๊ด๊ณ๊ฐ 1:n ๋๋ n:m (ํธ๋ฆฌ, ๊ทธ๋ํ ๋ฑ)
- ํ์ผ ๊ตฌ์กฐ : ์๋ก ๊ด๋ จ๋ ํ๋๋ค๋ก ๊ตฌ์ฑ๋ ๋ ์ฝ๋์ ์งํฉ์ธ ํ์ผ์ ๋ํ ์๋ฃ๊ตฌ์กฐ
์๊ณ ๋ฆฌ์ฆ์ด๋ ๋ฌด์์ธ๊ฐ?
์๋ฃ๊ตฌ์กฐ๊ฐ ์๋ฃ์ ํํ ๋ฐ ์ ์ฅ๋ฐฉ๋ฒ์ ๋ปํ๋ค๋ฉด, ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ ๊ฒ ํํ ๋ฐ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋
- ์๊ฐ ๋ณต์ก๋(Time complexity) : ์๊ณ ๋ฆฌ์ฆ์ ์คํ์์ผ ์๋ฃํ๋ ๋ฐ ํ์ํ ์ปดํจํฐ ์๊ฐ์ ์
์๊ฐ ๋ณต์ก๋ ๊ตฌํ๋ ๋ฒ : '๋ฐ์ดํฐ์ ์ n์ ๋ํ ์ฐ์ฐ ํ์์ ํจ์ T(n)์ ๊ตฌ์ฑํ๋ค’.
→ ๋ฐ์ดํฐ ์์ ์ฆ๊ฐ์ ๋ฐ๋ฅธ ์ฐ์ฐ ํ์์ ๋ณํ ์ ๋๋ฅผ ํ๋จํ ์ ์๋ค.
- ๊ณต๊ฐ ๋ณต์ก๋(space complexity) : ์๊ณ ๋ฆฌ์ฆ์ ์คํ์์ผ ์๋ฃํ๋ ๋ฐ ํ์ํ ๋ฉ๋ชจ๋ฆฌ์ ์
๋น -์ค ํ๊ธฐ๋ฒ(Big-Oh Notation)
์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ํ๋ด๋ ์ํ์ ์ธ ํ๊ธฐ๋ฒ์ด๋ฉฐ, O(f(n))์ผ๋ก ๋ํ๋ธ๋ค.
- O(1) : ์์ํ ๋น -์ค, ๋ฐ์ดํฐ ์์ ์๊ด์์ด ์ฐ์ฐํ์๊ฐ ๊ณ ์ (ex: push, pop)
- O(log n) : ๋ก๊ทธํ ๋น -์ค, '๋ฐ์ดํฐ ์์ ์ฆ๊ฐ์จ'์ ๋นํด์ '์ฐ์ฐ ํ์์ ์ฆ๊ฐ์จ'์ด ํจ์ฌ ๋ฎ์ (ex: ์ด์งํธ๋ฆฌ)
- O(n) : ์ ํ ๋น -์ค, ๋ฐ์ดํฐ์ ์์ ์ฐ์ฐํ์๊ฐ ๋น๋กํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค (ex: for๋ฌธ)
- O(n*log n) : ๋ฐ์ดํฐ์ ์๊ฐ ๋ ๋ฐฐ๋ก ๋ ๋, ์ฐ์ฐ ํ์๋ ๋ ๋ฐฐ๋ฅผ ์กฐ๊ธ ๋๊ฒ ์ฆ๊ฐ (ex: ํต ์ ๋ ฌ, ๋ณํฉ ์ ๋ ฌ, ํ ์ ๋ ฌ)
- O(n²) : ๋ฐ์ดํฐ ์์ ์ ๊ณฑ์ ํด๋นํ๋ ์ฐ์ฐ ํ์๋ฅผ ์๊ตฌ
- O(n³) : ๋ฐ์ดํฐ ์์ ์ธ์ ๊ณฑ์ ํด๋นํ๋ ์ฐ์ฐ ํ์๋ฅผ ์๊ตฌ
- O(2โฟ) : ์ง์ํ, ์ฌ์ฉํ๊ธฐ์ ๋ฌด๋ฆฌ๊ฐ ์์ผ๋ฉฐ ๋ฐ์ดํฐ ์ฆ๊ฐ์ ๋ฐ๋ผ ์ฐ์ฐ ํ์๊ฐ ๊ธฐํ๊ธ์๋ก ๋์ด๋จ (ex: ํผ๋ณด๋์น ์)
์ง๊ธ๊น์ง ์ค๋ช ํ ๋น -์ค ํ๊ธฐ๋ค์ ์ฑ๋ฅ(์ํ ์๊ฐ, ์ฐ์ฐ ํ์)์ ๋์๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค
O(1) < O(log n) < O(n) < O(n*log n) < O(n²) < O(n³) < O(2โฟ)
์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ
์๋ฃ๊ตฌ์กฐ : ๋ฐ์ดํฐ๋ฅผ ์ด๋ ํ ํํ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ๊ฒ์ธ์ง์ ๋ํ ๋ฐฉ๋ฒ.
→ ๊ทธ๋์ ์๋ฃ๊ตฌ์กฐ๋ ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ์๋ฃ๋ฅผ ์ ์ฅํ ๊ฒ์ธ๊ฐ์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํ๋ค.
์๊ณ ๋ฆฌ์ฆ : ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ฑฐ๋ ๋ณํํ๊ฑฐ๋ ์์ ํ ๋ ํ์ํ ๋ฐฉ๋ฒ.
→ ๊ทธ๋์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ ์ฐจ์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํ๋ค.
ํ๋ก๊ทธ๋จ = ์๋ฃ๊ตฌ์กฐ + ์๊ณ ๋ฆฌ์ฆ
ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ํน์ ์์ ์ ์ํํ๋ ์ผ๋ จ์ ๋ช ๋ น์ด๋ค์ ๋ชจ์์ด๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋์ ์๋ฃ๊ตฌ์กฐ๊ฐ ์ฌ์ฉ๋๊ณ , ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํน์ ์์ ์ ์ํํ๋ ์ ์ฐจ๋ ์๊ณ ๋ฆฌ์ฆ์ธ ๊ฒ์ด๋ค. ๋ฐ๋ผ์, ํ๋ก๊ทธ๋จ์ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค๊ณ ํํ๋๊ณ ๋ ํ๋ค.
ex : ์ต๋๊ฐ์ ์ฐพ๋ ํ๋ก๊ทธ๋จ = ๋ฐฐ์ด(์๋ฃ๊ตฌ์กฐ) + ์์ฐจ ํ์(์๊ณ ๋ฆฌ์ฆ)
'Computer Science > Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ (Tree) (0) | 2022.04.26 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ์ฐ๊ฒฐ๋ฆฌ์คํธ(Linked List) (0) | 2022.03.11 |
[์๋ฃ๊ตฌ์กฐ] ํ(Queue) (0) | 2022.03.10 |
[์๋ฃ๊ตฌ์กฐ] ์คํ(Stack) (0) | 2022.03.10 |
[์๋ฃ๊ตฌ์กฐ] ์ฌ๊ท(Recursion) (0) | 2022.03.10 |