[ํด๋ผ์ฐ๋ฉ ์ดํ๋ฆฌ์ผ์ด์ ์์ง๋์ด๋ง TIL] 240408 - 240411 ์๋ฃ๊ตฌ์กฐ/์๊ณ ๋ฆฌ์ฆ ํ์ต
Intro
๋ฐ๋ธ์ฝ์ค firebase ๊ฐ์๋ ๋ฒ ์ฐผ๋๋ฐ ์๋ฃ๊ตฌ์กฐ/์๊ณ ๋ฆฌ์ฆ ๊ฐ์๊น์ง ์์ด์ ๋ฃ๋๋ผ ์กฐ๊ธ ํ๋ค์๋ค.
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๊ณ ํด์ค ๊ฐ์๊น์ง ๋ค์ด์ผ ํ๋๋ฐ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
์๊ฐ ์ ์ด๋ ค์ด ๋ฌธ์ ๋ค์ ์กฐ๊ธ๋ง ๊ณ ๋ฏผํ๊ณ ํ์ด๋ฅผ ๋ณด๊ณค ํ๋ค.
์ฌ์ ๋ก์ธ ๋ ๋ค์ ํ์ด๋ด์ผ์ง!
์ค๋ ํ์ตํ ๋ด์ฉ
์คํ (Stack)
: LIFO (Last In First Out)
ํ (Queue)
: FIFO (First In First Out)
- shift ํจ์ ์ฌ์ฉ์ ์ง์
- front, rear, index ๋ณ์๋ฅผ ์ง์ ํด์ ๋ณ์๋ฅผ ๊บผ๋ด๋ฉด front++ ์ด๋ฐ ์์ผ๋ก ๊ตฌํํ๋ฉด ๋จ
ํด์ ํ ์ด๋ธ
: ์ ๋ ฅ๋ฐ์ ๊ฐ์ ํน์ ๋ฒ์ ๋ด ์ซ์๋ก ๋ณ๊ฒฝํ๋ ํจ์
ex. “gender” ⇒ 172461724 …
โ ๏ธ ๋ง์ฝ ํด์ ํจ์์ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ์ฌ ๊ฒน์น๋ค๋ฉด??
- ์ ํ ํ์ฌ๋ฒ
- ํ ์์ญ์ ๋ชฐ๋ฆฌ๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํ ์ ์๋ค.
- ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์์ผ๋ก ํ ์นธ ์ด๋
- ์ ๊ณฑ ํ์ฌ๋ฒ
- ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์ถฉ๋์ด ๋ฐ์ํ ํ์์ ์ ๊ณฑ๋งํผ ์์ผ๋ก ์ด๋
- ์ด์ค ํด์ฑ
- ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋ค๋ฅธ ํด์ ํจ์๋ฅผ ์ด์ฉํ๊ธฐ
- ๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ
- ๋ฒํท์ ๊ฐ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ์ฌ์ฉํ์ฌ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋ฆฌ์คํธ์ ๊ฐ์ ์ถ๊ฐ
ํด์๋ ์ฃผ๋ก ์ถ์๋ถ ๊ด๋ฆฌ ๋ฑ์ ์ฌ์ฉ๋จ
์๋ฐ์คํฌ๋ฆฝํธ์์ ํด์ ํ ์ด๋ธ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- Array (์ถ์ฒํ๋ ๋ฐฉ์์ X)
const table = []
table['key'] = 100
table['key2'] = 'hello'
console.log(table['key'])
delete table['key']
- Object
const table = {}
table['key'] = 100
table['key2'] = 'hello'
delete table['key']
- Map: ๋ค์ํ ํ์ ์ ๋ฃ์ ์ ์ ๋ฆฌ (object๋ key๋ก ์ธ ์ ์์), ํธํ ๋ฉ์๋์ ํธํ ์ํ ๊ฐ๋ฅ
const table = new Map()
table.set('key', 100)
table.set('key2', 'hello')
table.get('key')
- Set: ์งํฉ ์ฐ์ฐ (์ค๋ณต X)
const table = new Set()
table.add('key')
table.add('key2')
table.has('key')
table.clear()
๊ทธ๋ํ
: ์ ์ ๊ณผ ์ ์ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๋น์ ํ ์๋ฃ๊ตฌ์กฐ
์ ์ ์งํฉ๊ณผ ๊ฐ์ ์งํฉ์ผ๋ก ํํํ ์ ์๋ค.
ex) ํ์ด์ง๋ญํฌ ์๊ณ ๋ฆฌ์ฆ
๊ทธ๋ํ์ ํน์ง
- ์ ์ ์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ ๊ฐ์ง ์ ์๋ค.
- ํฌ๊ฒ ๋ฐฉํฅ ๊ทธ๋ํ์ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๋ก ๋๋ ์ ์๋ค.
- ๊ฐ์ ์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ์ฌ์ดํด์ด ๋ฐ์ํ ์ ์๋ค.
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ
- ๊ฐ์ ์ผ๋ก ์ด์ด์ง ์ ์ ๋ผ๋ฆฌ๋ ์๋ฐฉํฅ์ผ๋ก ์ด๋์ด ๊ฐ๋ฅํ๋ค.
- ํํํ๊ธฐ์ (a, b)์ (b, a)๋ ๊ฐ์ ๊ฐ์ ์ผ๋ก ์ทจ๊ธํ๋ค. (์๋ฐฉํฅ ํตํ ๋๋ก)
๋ฐฉํฅ ๊ทธ๋ํ
- ๊ฐ์ ์ ๋ฐฉํฅ์ฑ์ด ์กด์ฌ ํจ
- (a, b)์ (b, a)๋ ๋ค๋ฅธ ๊ฐ์์ผ๋ก ์ทจ๊ธํ๋ค.
์ฐ๊ฒฐ ๊ทธ๋ํ
- ๋ชจ๋ ์ ์ ์ด ์๋ก ์ด๋ ๊ฐ๋ฅํ ์ํ์ธ ๊ทธ๋ํ
๋น์ฐ๊ฒฐ ๊ทธ๋ํ
- ํน์ ์ ์ ์ ์ฌ์ด์ ๊ฐ์ ์ด ์กด์ฌํ์ง ์๋ ๊ทธ๋ํ
์์ ๊ทธ๋ํ
- ๋ชจ๋ ์ ์ ๋ผ๋ฆฌ ์ฐ๊ฒฐ๋ ์ํ์ธ ๊ทธ๋ํ
- ํ ๊ฐ์ ์ ์ ์ ์ = ๋ชจ๋ ์ ์ ์ ์ - 1
์ฌ์ดํด
- ๊ทธ๋ํ์ ์ ์ ๊ณผ ๊ฐ์ ์ ๋ถ๋ถ ์งํฉ์์ ์ํ์ด ๋๋ ๋ถ๋ถ
๊ทธ๋ํ ๊ตฌํ ๋ฐฉ๋ฒ
: ์ธ์ ํ๋ ฌ์ด๋ ์ธ์ ๋ฆฌ์คํธ ๋ฐฉ์ ์ฌ์ฉ
ํธ๋ฆฌ
: ๋ฐฉํฅ ๊ทธ๋ํ์ ์ผ์ข ์ผ๋ก ์ ์ ์ ๊ฐ๋ฆฌํค๋ ๊ฐ์ ์ด ํ๋ ๋ฐ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
ex) ์กฐ์ง๋, ํ์ผ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ
ํธ๋ฆฌ์ ํน์ง
- ๋ฃจํธ ์ ์ ์ ์ ์ธํ ๋ชจ๋ ์ ์ ์ ๋ฐ๋์ ํ๋์ ๋ถ๋ชจ ์ ์ ์ ๊ฐ์ง๋ค.
- ์ ์ ์ด N๊ฐ์ธ ํธ๋ฆฌ๋ ๋ฐ๋์ N-1๊ฐ์ ๊ฐ์ ์ ๊ฐ์ง๋ค.
- ๋ฃจํธ์์ ํน์ ์ ์ ์ผ๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ ์ ์ผํ๋ค.
์ด์ง ํธ๋ฆฌ
: ๊ฐ ์ ์ ์ด ์ต๋ 2๊ฐ์ ์์์ ๊ฐ์ง๋ ํธ๋ฆฌ
- ์ด์งํธ๋ฆฌ
- ์์ ์ด์งํธ๋ฆฌ
- ํฌํ ์ด์งํธ๋ฆฌ
- ํธํฅํธ๋ฆฌ
์ด์ง ํธ๋ฆฌ ํน์ง
- ์ ์ ์ด N๊ฐ์ธ ์ด์งํธ๋ฆฌ๋ ์ต์ ์ ๊ฒฝ์ฐ ๋์ด๊ฐ N์ด ๋ ์ ์๋ค.
- ์ ์ ์ด N๊ฐ์ธ ํฌํ ๋๋ ์์ ์ด์ง ํธ๋ฆฌ์ ๋์ด๋ logN
- ๋์ด๊ฐ h์ธ ํฌํ ์ด์งํธ๋ฆฌ๋ 2^h-1๊ฐ์ ์ ์ ์ ๊ฐ์ง๋ค.
- ์ผ๋ฐ์ ์ธ ์ด์งํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ง์ง ์๋ค.
- ์ด์ง ํ์ ํธ๋ฆฌ
- ํ
- AVL ํธ๋ฆฌ
- ๋ ๋ ๋ธ๋ ํธ๋ฆฌ
ํธ๋ฆฌ ๊ตฌํ ๋ฐฉ๋ฒ
: ์ธ์ ํ๋ ฌ, ์ธ์ ๋ฆฌ์คํธ๋ก ๊ตฌํ ๊ฐ๋ฅ
๋ฐฐ์ด ํน์ ์์์ ๋งํฌ๊ฐ 2๊ฐ ์กด์ฌํ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํํ ์ ์๋ค.
์ฐ์ ์์ ํ
: FIFO์ธ ํ์ ๋ฌ๋ฆฌ ์ฐ์ ์์๊ฐ ๋์ ์์๊ฐ ๋จผ์ ๋๊ฐ๋ ํ
์ฐ์ ์์ ํ๋ ์๋ฃ๊ตฌ์กฐ๋ ์๋๋ฉฐ ๋จ์ง ๊ฐ๋ ์ผ ๋ฟ์ด๋ค.
ํ
: ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ ํฉํ ๋ฐฉ๋ฒ
์ด์งํธ๋ฆฌ ํํ๋ฅผ ๊ฐ์ง๋ฉฐ ์ฐ์ ์์๊ฐ ๋์ ์์๊ฐ ๋จผ์ ๋๊ฐ๊ธฐ ์ํด ์์๊ฐ ์ฝ์ , ์ญ์ ๋ ๋ ๋ฐ๋ก ์ ๋ ฌ๋๋ ํน์ง์ด ์๋ค.
(ํ ≠ ์ฐ์ ์์ ํ)
ํ์ ํน์ง
- ์์๊ฐ ์ถ๊ฐ๋ ๋ ํธ๋ฆฌ์ ๊ฐ์ฅ ๋ง์ง๋ง ์ ์ ์ ์์น
- ์ถ๊ฐ ํ ๋ถ๋ชจ ์ ์ ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค๋ฉด ๋ถ๋ชจ ์ ์ ๊ณผ ์์๋ฅผ ๋ฐ๊พผ๋ค.
- ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ์ฐ์ ์์๊ฐ ๋์ ์ ์ ์ด ๋ฃจํธ๊ฐ ๋๋ค.
- ์์ ์ด์ง ํธ๋ฆฌ์ ๋์ด๋ logN์ด๊ธฐ์ ํ์ ์์ ์ถ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ O(logN) ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
ํ ์์ ์ ๊ฑฐ ์๊ณ ๋ฆฌ์ฆ
- ์์ ์ ๊ฑฐ๋ ๋ฃจํธ ์ ์ ๋ง ๊ฐ๋ฅํ๋ค.
- ๋ฃจํธ ์ ์ ์ด ์ ๊ฑฐ๋ ํ ๊ฐ์ฅ ๋ง์ง๋ง ์ ์ ์ด ๋ฃจํธ์ ์์นํ๋ค.
- ๋ฃจํธ ์ ์ ์ ๋ ์์ ์ ์ ์ค ๋ ์ฐ์ ์์๊ฐ ๋์ ์ ์ ๊ณผ ๋ฐ๊พผ๋ค.
- ๋ ์์ ์ ์ ์ด ์ฐ์ ์์๊ฐ ๋ ๋ฎ์ ๋๊น์ง ๋ฐ๋ณต
- ์์ ์ด์ง ํธ๋ฆฌ์ ๋์ด๋ logN์ด๊ธฐ์ ํ์ ์์ ์ ๊ฑฐ ์๊ณ ๋ฆฌ์ฆ์ O(logN) ์๊ฐ ๋ณต์ก๋์ด๋ค.
ํธ๋ผ์ด (Trie)
: ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ํจ์จ์ ์ผ๋ก ํ์ํ๊ธฐ ์ํ ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ
ํธ๋ผ์ด ํน์ง
- ๊ฒ์์ด ์๋์์ฑ, ์ฌ์ ์ฐพ๊ธฐ ๋ฑ์ ์์ฉ๋๋ค.
- ๋ฌธ์์ด์ ํ์ํ ๋ ๋จ์ํ๊ฒ ๋น๊ตํ๋ ๊ฒ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฐพ์ ์ ์๋ค.
- L์ด ๋ฌธ์์ด ๊ธธ์ด์ผ ๋ ํ์, ์ฝ์ ์ O(L)๋งํผ์ด ๊ฑธ๋ฆฐ๋ค.
- ๋์ ๊ฐ ์ ์ ์ด ์์์ ๋ํ ๋งํฌ๋ฅผ ์ ๋ถ ๊ฐ์ง๊ณ ์๊ธฐ์ ์ ์ฅ๊ณต๊ฐ์ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
ํธ๋ผ์ด ๊ตฌ์กฐ
- ๋ฃจํธ๋ ๋น์ด์๋ค.
- ๊ฐ ๊ฐ์ ์ ์ถ๊ฐ๋ ๋ฌธ์๋ฅผ ํค๋ก ๊ฐ์ง๋ค.
- ๊ฐ ์ ์ ์ ์ด์ ์ ์ ์ ๊ฐ + ๊ฐ์ ์ ํค๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ง๋ค.
- ํด์ ํ ์ด๋ธ๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ ์ ์๋ค.
์ด์ง ํ์
์ ํ ํ์์ ์์๋๋ก ํ๋์ฉ ์ฐพ๋ ํ์ ์๊ณ ๋ฆฌ์ฆ์ด๊ณ , ์ด์ง ํ์์ ์ ๋ ฌ๋์ด์๋ ์์๋ค์ ๋ฐ์ฉ ์ ์ธํ๋ฉฐ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ด์ง ํ์ ํน์ง
- ๋ฐ๋์ ์ ๋ ฌ๋์ด ์์ด์ผ ํ๋ค.
- ๋ฐฐ์ด ํน์ ์ด์ง ํธ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ ๊ฐ๋ฅ
- O(logN) ์๊ฐ๋ณต์ก๋ ← ๋งค์ฐ ๋น ๋ฆ
์ ๋ ฌ
: ์์๋ค์ ์ผ์ ํ ์์๋๋ก ์ด๊ฑฐํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ ๋ ฌ ๊ธฐ์ค์ ์ฌ์ฉ์๊ฐ ์ ํ ์ ์๋ค.
- ํฌ๊ฒ ๋น๊ต์๊ณผ ๋ถ์ฐ์ ์ ๋ ฌ๋ก ๋๋ ์ ์๋ค.
- ๋๋ถ๋ถ ์ธ์ด๊ฐ ๋นํธ์ธ์ผ๋ก ์ ๊ณตํด์ค
- ์ฝ์ , ์ ํ, ๋ฒ๋ธ, ๋จธ์ง, ํ, ํต ์ ๋ ฌ ๋ฑ ๋ค์ํ ์ ๋ ฌ ๋ฐฉ์์ด ์กด์ฌ
์ด๋ค ์ ๋ ฌ์ด ์ ์ผ ๋น ๋ฅผ๊น?
=> ์ ํด์ ธ์์ง ์๋ค!
๋น๊ต์ ์ ๋ ฌ
- ๋ฒ๋ธ ์ ๋ ฌ: ์๋ก ์ธ์ ํ ๋ ์์๋ฅผ ๊ฒ์ฌํ์ฌ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ O(n^2)
- ์ ํ ์ ๋ ฌ: ์ ํํ ์์์ ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ์์๋ฅผ ๊ตํํ๋ ์๊ณ ๋ฆฌ์ฆ O(n^2)
- ์ฝ์ ์ ๋ ฌ: ์ ํํ ์์๋ฅผ ์ฝ์ ํ ์ ์๋ ์์น๋ฅผ ์ฐพ์ ์ฝ์ ํ๋ ๋ฐฉ์์ ์๊ณ ๋ฆฌ์ฆ O(n^2)
๋ถ์ฐ์ ์ ๋ ฌ
๋ถํ ์ ๋ณต
: ๋ฌธ์ ๋ฅผ ์์ 2๊ฐ์ ๋ฌธ์ ๋ก ๋ถ๋ฆฌํ๊ณ ๋ ์ด์ ๋ถ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅ ํ ๋ ์ฒ๋ฆฌํ ํ ํฉ์น๋ ์ ๋ต ⇒ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ์์ฉ๋จ
- ํฉ๋ณ ์ ๋ ฌ: ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ ์ต์ ๊ณผ ์ต์ ์ด ๊ฐ์ ์์ ์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ O(nlogn)
- ํต ์ ๋ ฌ: ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ ์ด์ํ ๋งค์ฐ ๋น ๋ฅด์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ ๋ถ์์ ์ ๋ ฌ O(nlogn)
โ Javascript์์ ์ ๋ ฌ์ sort() ์ฌ์ฉ
์์ ๊ตฌํ๊ธฐ
- 2๋ถํฐ N-1๊น์ง ๋ฃจํธ๋ฅผ ๋๋ฉฐ ๋๋ ๋ณด๊ธฐ O(n)
- ๊ทธ ์ด๋ค ์์๋ N์ ์ ๊ณฑ๊ทผ๋ณด๋ค ํฐ ์๋ก ๋๋ ์ง์ง ์๋๋ค. O(sqrt(n))
- ์๋ผํ ์คํ ๋ค์ค์ ์ฒด: ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ์๊ณ ๋ฆฌ์ฆ
๋ง๋ฌด๋ฆฌ
๊ฐ์๋ฅผ ๋ค์ ๋ ์ํ! ํ๋ฉด์ ์ดํด๊ฐ ์๋๋๋ฐ ๋ง์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ คํ๋ฉด ์ ์ํ๋ฆฌ๊ณ ๋ง๋งํ ๊ฒ ๊ฐ๋ค.
์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์ด๋ณด๋ฉด์ ์ต์ํด์ ธ์ผ๊ฒ ๋ค.