[TIL] ์๊ณ ๋ฆฌ์ฆ
๐ซถ๐ป ์๊ณ ๋ฆฌ์ฆ Algorithm
- ์ด๋ ํ ์ ๋ ฅ์ด ์๋ค๋ฉด ์ด ์ ๋ ฅ์ ๋ฐ๋ผ ๋ช ๋ น์ ๋ช ํํ๊ฒ ์คํํ๊ณ ํจ๊ณผ์ ์ผ๋ก ์ ๋ ฅ์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฌผ์ ๋์ถ
- ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๊ธฐ ์ํด ์ฒ๋ฆฌํ๋ ์์ฌ๊ฒฐ์ ๊ณผ์
๐๐ป ๊ตฌํ implementation
- ๋ฌธ์ ํด๊ฒฐ๊ณผ์ ์ ์ปดํจํ ์ฌ๊ณ ๋ก ๋ณํํ์ฌ ์ฝ๋๋ก ๊ตฌํ
- ๊ตฌํ์ ์ ํ๊ธฐ ์ํด์๋
โ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฌธ๋ฒ์ ์ ํํ ์๊ณ ์์ด์ผ ํจ
โก ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ฝ๋๋ฅผ ์ค์ ์์ด ๋น ๋ฅด๊ฒ ์์ฑํด์ผ ํจ
- ๊ตฌํ ๋ฅ๋ ฅ ํ๋ณ ๋ฐฉ๋ฒ : ์์ ํ์ (Brute force) & ์๋ฎฌ๋ ์ด์ (Simulatiion)
๐๐ป ์๋ฎฌ๋ ์ด์ Simulation
- ๋ฌธ์ ์์ ์๊ตฌํ๋ ๋ณต์กํ ์๊ตฌ์ฌํญ์ ๋น ๋จ๋ฆฌ์ง ์๊ณ ์ฝ๋๋ก ์ฎ๊ธฐ๋ ๊ฒ
- ๋ชจ๋ ๊ณผ์ ๊ณผ ์กฐ๊ฑด์ด ์ ์๋์ด ๊ทธ ๊ณผ์ ์ ๊ฑฐ์น ๊ฒฐ๊ณผ๊ฐ ๋ฌด์์ธ์ง ํ์ธ
๐๐ป ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ : BFA
- ์ ๋ต์ ๋ฌด์กฐ๊ฑด ๊ตฌํ๋ ์นํธํค
- ๋ฌด์ฐจ๋ณ ๋์ ๋ฐฉ๋ฒ์ ๋ํ๋ด๋ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ๋ถ ํ์ธํ์ฌ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ์
- ์์ํ ์ปดํจํ ์ฑ๋ฅ์ ์์กดํ์ฌ ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ์๋ํ์ฌ ๋ฌธ์ ํด๊ฒฐ
(1) ํด๊ฒฐํ๊ณ ์ ํ๋ ๋ฌธ์ ์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ฅผ ๋๋ต์ ์ผ๋ก ๊ณ์ฐ
(2) ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐฉ๋ฒ์ ๋ค ๊ณ ๋ ค
(3) ์ค์ ๋ต์ ๊ตฌํ ์ ์๋์ง ์ ์ฉ
๐ก ๋ฌด์ฐจ๋ณ ๋์
- ํน์ ํ ์ํธ๋ฅผ ํ๊ธฐ ์ํด์ ๋ชจ๋ ๊ฐ์ ๋์ ํ๋ ๋ฐฉ๋ฒ
- ์ง๋ฅํ ์ ๋ต์ ์ฌ์ฉํ์ง ์๊ณ ์๋ง์ ์ํ ์ฐฉ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ํดํน
๐ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ ์ข ๋ฅ
โ ๋จ์ Brute-Force
- ํน๋ณํ ๋ฐฉ๋ฒ ๋์ ๋จ์ํ ๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ง
โก ๋นํธ ๋ง์คํฌ
- ๊ฐ ์์๊ฐ ๋ ๊ฐ์ง ์ํ๋ง์ ๊ฐ์ง ์ ์์
- 2์ง์ ํํ ๊ธฐ๋ฒ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ
- ๋์ฌ ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ ๊ฐ๊ฐ ์์์ ํฌํจ๋๊ฑฐ๋ ํฌํจ๋์ง ์๋ ๋ ๊ฐ์ง ์ ํ์ผ๋ก ๊ตฌ์ฑ๋๋ ๊ฒฝ์ฐ ์ ์ฉ
โข ์ฌ๊ท ํจ์
- ์ปดํจํฐ๊ฐ ์ํํ ์์ ์ค ๋ฐ๋ณต๋๋ ์์ ์ ์ชผ๊ฐ์ด ํ ์์ ์คํ ํ ๋๋จธ์ง ์์ ์ ์๊ธฐ ์์ ์๊ฒ ํธ์ถํ์ฌ ๊ฒฐ๊ณผ ์์ฑ
- ์์๊ฐ ํฌํจ์ด ๋๋ฉด ์์๋ฅผ ๋ฃ๊ณ ํจ์๋ฅผ ํธ์ถํ๊ณ ํฌํจ๋์ง ์์ผ๋ฉด ๊ทธ ์ํ์์ ํจ์ ํธ์ถ
โฃ ์์ด
- n๊ฐ์ ๊ฐ ์ค์์ r๊ฐ๋ฅผ ์์๋๋ก ๋ฝ๋ ๊ฒฝ์ฐ
โค DFS / BFS (๊น์ด์ฐ์ /๋๋น์ฐ์ )
๐์์ ํ์ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ
: ํ๋ก์ธ์ค ์๋ ๋์ผ ๋ & ์ฌ๋ฌ ์๋ฃจ์ ์ ๊ฐ๊ฐ ํ์ธํด์ผ ํ ๋ ์ฌ์ฉ
โ ์์ฐจ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ Sequential Search
- ๋ฐฐ์ด ์์ ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ๊ฒ์ํ ๋ ์ธ๋ฑ์ค 0๋ถํฐ ๋ง์ง๋ง๊น์ง ์ฐจ๋ก๋๋ก ๊ฒ์
โก ๋ฌธ์์ด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ Brute-Force String Matching
- ๊ธธ์ด๊ฐ n์ธ ์ ์ฒด ๋ฌธ์์ด๊ณผ ๊ธธ์ด๊ฐ m์ธ ๋ฌธ์์ด ํจํด์ ํฌํจํ๋์ง ๊ฒ์
โข ์ ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ Selection Sort
- ์ ์ฒด ๋ฐฐ์ด์ ๊ฒ์ํ์ฌ ํ์ฌ ์์์ ๋น๊ตํ๊ณ ์ปฌ๋ ์ ์ด ์์ ํ ์ ๋ ฌ๋ ๋๊น์ง ์์๋ค๋ผ๋ฆฌ ๊ตํํ๋ ์๊ณ ๋ฆฌ์ฆ
+ ๊ทธ ์ธ : ๋ฒ๋ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ, Tree ์๋ฃ๊ตฌ์กฐ์ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ, ๋์ ํ๋ก๊ทธ๋๋ฐ(DP)
๐ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ ํ๊ณ ๋ฐ ์ฃผ์์
- ํ๊ณ : ๋ฌธ์ ์ ๋ณต์ก๋์ ๋งค์ฐ ๋ฏผ๊ฐ
→ ๋ฌธ์ ๊ฐ ๋ณต์กํด์ง ์๋ก ํ์ํ ์์(์๊ฐ, ์ปดํจํ ์์ ๋ฑ)์ด ๋ง์์ง
- ์ฃผ์์ : ์ ๋ ฅ์ ๊ฐ์(N)์ด ์ ์์๋ก ์ข์
→ ์๊ฐ๋ณต์ก๋๊ฐ N์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ ์๋ก ๋ณต์ก๋ ์ฆ๊ฐ
๐๐ป ํ์ ์๊ณ ๋ฆฌ์ฆ
โ ์ ํ ํ์ ์๊ณ ๋ฆฌ์ฆ Linear Search Algorithm
โก ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ Binary Search Algorithm
โข ํด์ ํ์ ์๊ณ ๋ฆฌ์ฆ Hash search Algorithm
๐๐ป ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ : BSA
- ์ ๋ ฌ๋ ๋ฐฐ์ด ๋๋ ๋ฆฌ์คํธ์ ์ ํฉํ ๊ณ ์ ํ์ ๋ฐฉ๋ฒ
- ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋ ์ํ์์ ์ ๋ฐ์ฉ ๋ฒ์๋ฅผ ๋๋ ๋ถํ ์ ๋ณต๊ธฐ๋ฒ์ผ๋ก ํน์ ๊ฐ์ ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ
- ์๊ฐ ๋ณต์ก๋๋ O(logN) : ์๊ฐ์ด ๋น ๋ฅด์ง๋ง ํญ์ ์ข์ ๊ฑด x
→ ๋ฐ์ดํฐ ์์ด ์ ๊ณ ๋ฐ์ดํฐ๊ฐ ์์ชฝ์ ์์นํ๋ค๋ฉด ์ ํํ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ ํฉ
- ์ฃผ๋ก ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์์ ์ฌ์ฉ
→ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ์์๊ฐ์ ๋ ํจ์จ์ ์ผ๋ก ๊ฒ์ํ ๋ ์ฌ์ฉ
→ ๋ฐ์ดํฐ ์์ด ๋ง์ ๋ ์ฌ์ฉ
* ์ด์ง ํ์ ํธ๋ฆฌ์(BST) ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ(BSA) ์ฐจ์ด
(1) ์ด์ง ํ์ ํธ๋ฆฌ๋ ์๋ฃ๊ตฌ์กฐ
- ํ๋์ ๋
ธ๋๊ฐ ๋ ๊ฐ์ ํ์ ๋
ธ๋๋ฅผ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ
- ์ผ์ชฝ์๋ ์์ ๊ฐ, ์ค๋ฅธ์ชฝ์๋ ํฐ ๊ฐ์ด ๋ค์ด๊ฐ
(2) ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ์ ํด๊ฒฐ๋ฐฉ๋ฒ
๐ ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ ํ๊ณ
- ๋ฐฐ์ด์๋ง ๊ตฌํ ๊ฐ๋ฅ & ์ ๋ ฌ๋์ด์ผ ๊ตฌํ ๊ฐ๋ฅ