๋ชฉ๋กDEV_IN/Algorithm (13)
let's get IT with DAVINA ๐ป
BFS(Breadth First Search) ๋ค์ฐจ์ ๋ฐฐ์ด์์ ๊ฐ ์นธ์ ๋ฐฉ๋ฌธํ ๋ ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ ์๊ณ ๋ฆฌ์ฆ 1. ์์ํ๋ ์นธ์ ํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธํ๋ค๋ ํ์๋ฅผ ๋จ๊น 2. ํ์์ ์์๋ฅผ ๊บผ๋ด์ด ๊ทธ ์นธ์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ์นธ์ ๋ํด 3๋ฒ์ ์งํ 3. ํด๋น ์นธ์ ์ด์ ์ ๋ฐฉ๋ฌธํ๋ค๋ฉด ์๋ฌด๊ฒ๋ ํ์ง ์๊ณ , ์ฒ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ค๋ฉด ๋ฐฉ๋ฌธํ๋ค๋ ํ์๋ฅผ ๋จ๊ธฐ๊ณ ํด๋น ์นธ์ ํ์ ์ฝ์ 4. ํ๊ฐ ๋น ๋๊น์ง 2๋ฒ์ ๋ฐ๋ณต ๋ชจ๋ ์นธ์ด ํ์ 1๋ฒ์ฉ ๋ค์ด๊ฐ๋ฏ๋ก ์๊ฐ๋ณต์ก๋๋ ์นธ์ด N๊ฐ์ผ ๋ O(N) ์ด ๋, x๊ฐ ํ & y๊ฐ ์ด ๊ตฌํ const graph = { A: ["B", "C"], B: ["A", "D"], C: ["A", "G", "H", "I"], D: ["B", "E", "F"], E: ["D"], F: ["D"], G:..
Deque (Double Ended Queue) ์์ชฝ ๋์์ ์ฝ์ /์ญ์ ๊ฐ ์ ๋ถ ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ ๋ฑ์ ์ฑ์ง ์์์ ์ถ๊ฐ → O(1) ์์์ ์ ๊ฑฐ → O(1) ์ ์ผ ์/๋ค์ ์์ ํ์ธ → O(1) ์ ์ ์/๋ค๊ฐ ์๋ ๋๋จธ์ง ์์๋ค์ ํ์ธ/๋ณ๊ฒฝ์ด ์์น์ ์ผ๋ก ๋ถ๊ฐ๋ฅ ๊ตฌํ const int MX = 1000005; int dat[2*MX+1]; //์๋ค๋ก ๋ค ์ฝ์ ์ด ๊ฐ๋ฅํด์ ์์ชฝ์ผ๋ก ํ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 2*MX+1 int head=MX, tail=MX;
์ฐ๊ฒฐ ๋ฆฌ์คํธ ์์๋ค์ ์ ์ฅํ ๋ ๊ทธ ๋ค์ ์์๊ฐ ์๋ ์์น๋ฅผ ํฌํจ์ํค๋ ๋ฐฉ์์ผ๋ก ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ฑ์ง k๋ฒ์งธ ์์๋ฅผ ํ์ธ/๋ณ๊ฒฝํ๊ธฐ ์ํด O(k)๊ฐ ํ์ํจ ์ฐ๋ฆฌ๋ ์ฒซ ๋ฒ์งธ ์์์ ์ฃผ์๋ง ์๊ณ ์๊ธฐ ๋๋ฌธ, ์ฐจ๊ทผ์ฐจ๊ทผ ๋ค์ ์ฃผ์๋ก ๋์ด๊ฐ๋ฉฐ ์ฐพ์์ผ ํจ ์์์ ์์น์ ์์๋ฅผ ์ถ๊ฐ/์ ๊ฑฐ๋ O(1) ์ด์ ์์์ ๋ค์ ์ฃผ์๋ฅผ ๋ณ๊ฒฝ๋ง ํด์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋จ, ์ถ๊ฐ/์ ๊ฑฐ ํ๊ณ ์ถ์ ์์น์ ์ฃผ์๋ฅผ ์๊ณ ์์ ๊ฒฝ์ฐ์๋ง O(1) ์์๋ค์ด ๋ฉ๋ชจ๋ฆฌ ์์ ์ฐ์ํด์์ง ์์ Cache hit rate๊ฐ ๋ฎ์ง๋ง ํ ๋น์ด ๋ค์ ์ฌ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ข ๋ฅ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ : ๊ฐ ์์๊ฐ ์์ ์ ๋ค์ ์์์ ์ฃผ์๋ฅผ ๋ค๊ณ ์์ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ : ๊ฐ ์์๊ฐ ์์ ์ ์ด์ & ๋ค์ ์ฃผ์๋ฅผ ๋ ๋ค ๋ค๊ณ ์์ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ : ๋์ด ์ฒ..
๋ฐฐ์ด ๋ฉ๋ชจ๋ฆฌ ์์ ์์๋ฅผ ์ฐ์ํ๊ฒ ๋ฐฐ์นํ ์๋ฃ๊ตฌ์กฐ ๋ฐฐ์ด์ ์ฑ์ง O(1)์ k๋ฒ์งธ ์์๋ฅผ ํ์ธ/๋ณ๊ฒฝ ๊ฐ๋ฅ ์ถ๊ฐ์ ์ผ๋ก ์๋ชจ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ์(=overhead)๊ฐ ๊ฑฐ์ ์์ Cache hit rate๊ฐ ๋์ cache hit rate: ์บ์๊ฐ ์ ์ค๋๋ ์ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฐ์ํ ๊ตฌ๊ฐ์ ์ก์์ผ ํด์ ํ ๋น์ ์ ์ฝ์ด ๊ฑธ๋ฆผ ๊ธฐ๋ฅ๊ณผ ๊ตฌํ ์์์ ์์น์ ์๋ ์์๋ฅผ ํ์ธ/๋ณ๊ฒฝ → O(1) ์์๋ฅผ ๋์ ์ถ๊ฐ → O(1) ๋ง์ง๋ง ์์๋ฅผ ์ ๊ฑฐ → O(1) ์์์ ์์น์ ์์๋ฅผ ์ถ๊ฐ/์ ๊ฑฐ → O(N) ex) ๋ง์น ์ฑ ์ฅ์ ์ฑ ์ด ์ฐ์ํด์ ๊ฝํ์์ ๋ ์ค๊ฐ์ ์ฑ ์ ๋ฃ๊ธฐ ์ํด์ ๋๋จธ์ง ์ฑ ๋ค์ ๋ฐ์ด์ผํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ํฉ insert ํจ์ void insert(int idx, int num, int arr[], int&len){ for(l..
Greedy Algorithm (ํ์ ์๊ณ ๋ฆฌ์ฆ) ์ ํ์ ์๊ฐ๋ง๋ค ๋น์ฅ ๋์์ ๋ณด์ด๋ ์ต์ ์ ์ํฉ๋ง์ ์ซ์ ์ต์ข ์ ์ธ ํด๋ต์ ๋๋ฌํ๋ ๋ฐฉ๋ฒ Greedy Algorithm ๋ฌธ์ ํด๊ฒฐ ๋จ๊ณ ๐ฝ ์ ํ ์ ์ฐจ(Selection Procedure): ํ์ฌ ์ํ์์์ ์ต์ ์ ํด๋ต์ ์ ํํฉ๋๋ค. ์ ์ ์ฑ ๊ฒ์ฌ(Feasibility Check): ์ ํ๋ ํด๊ฐ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ๊ฒ์ฌํฉ๋๋ค. ํด๋ต ๊ฒ์ฌ(Solution Check): ์๋์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋์ง ๊ฒ์ฌํ๊ณ , ํด๊ฒฐ๋์ง ์์๋ค๋ฉด ์ ํ ์ ์ฐจ๋ก ๋์๊ฐ ์์ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค. - ํ์์ ์ ํ ์์ฑ(Greedy Choice Property) : ์์ ์ ํ์ด ์ดํ์ ์ ํ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. - ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ(Optimal Substructure) : ๋ฌธ์ ์ ๋ํ ..
๊ณต๊ฐ ๋ณต์ก๋ (Space Complexity) ์๊ณ ๋ฆฌ์ฆ์ด ์ํ๋๋ ๋ฐ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ ํ๋ก๊ทธ๋จ์ด ์๊ตฌํ๋ ๊ณต๊ฐ ⇒ ๊ณ ์ ์ ์ธ ๊ณต๊ฐ + ๊ฐ๋ณ์ ์ธ ๊ณต๊ฐ ๊ณ ์ ์ ์ธ ๊ณต๊ฐ: ์ฒ๋ฆฌํ ๋ฐ์ดํฐ์ ์์ ๋ฌด๊ดํ๊ฒ ํญ์ ์๊ตฌ๋๋ ๊ณต๊ฐ์ผ๋ก์, ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ฃผ์ง ์์ ๊ฐ๋ณ์ ์ธ ๊ณต๊ฐ: ์ฒ๋ฆฌํ ํ ์ดํฐ์ ์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์๊ตฌ๋๋ ๊ณต๊ฐ์ผ๋ก์ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ค! ๊ณต๊ฐ ๋ณต์ก๋ ๊ณ์ฐ์ ์๊ฐ ๋ณต์ก๋ ๊ณ์ฐ๊ณผ ๋น์ทํ๊ฒ ๋น ์ค(Big-O) ํ๊ธฐ๋ฒ์ผ๋ก ํํ ๋ณดํต ๊ณต๊ฐ ๋ณต์ก๋๋ ์๊ฐ ๋ณต์ก๋๋ณด๋ค ์ค์์ฑ์ด ๋จ์ด์ง๋ค. WHY? ์๊ฐ์ด ์ ์ผ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ๊น์ง ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๊ธฐ ๋๋ฌธ์.. BUT! ๋์ ๊ณํ๋ฒ(Dynamic Programming)๊ณผ ๊ฐ์ด ์๊ณ ๋ฆฌ์ฆ์ด๋ ํ๋์จ์ด ํ๊ฒฝ์ด ๋งค์ฐ ํ์ ๋์ด ์๋ ๊ฒฝ์ฐ..
์๊ฐ ๋ณต์ก๋ (Time Complextity) ์ ๋ ฅ๊ฐ์ด ์ปค์ง์ ๋ฐ๋ผ ์ฆ๊ฐํ๋ ์๊ฐ์ ๋น์จ์ ์ต์ํํ ์๊ณ ๋ฆฌ์ฆ ์ ๋ ฅ์ ํฌ๊ธฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์๊ด๊ด๊ณ Big-O ํ๊ธฐ๋ฒ ์ฃผ์ด์ง ์์ ๊ฐ์ด ๊ฐ์ฅ ํฐ ๋ํํญ๋ง ๋จ๊ฒจ์ ๋ํ๋ด๋ ๋ฐฉ๋ฒ Big-O(๋น -์ค) ์ต์ ์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๊ณผ์ ์์ “์ด ์ ๋ ์๊ฐ๊น์ง ๊ฑธ๋ฆด ์ ์๋ค”๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค! Big-Ω(๋น -์ค๋ฉ๊ฐ) ์ต์ ์ ๊ฒฝ์ฐ Big-θ(๋น -์ธํ) ์ค๊ฐ(ํ๊ท )์ ๊ฒฝ์ฐ O(1) constant complexity ์ ๋ ฅ๊ฐ์ด ์ฆ๊ฐํ๋๋ผ๋ ์๊ฐ์ด ๋์ด๋์ง ์๋๋ค. ์ ๋ ฅ๊ฐ์ ํฌ๊ธฐ์ ๊ด๊ณ์์ด, ์ฆ์ ์ถ๋ ฅ๊ฐ์ ์ป์ด๋ผ ์ ์๋ค. function O_1_algorithm(arr, index) { return arr[index]; } let arr = [1, 2..
์๊ณ ๋ฆฌ์ฆ์ด๋? ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ผ๋ จ์ ์ ์ฐจ๋ฅผ ์ ์ํ๊ณ , ๊ณต์ํํ ํํ๋ก ํํํ ์ผ์ข ์ ๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ ํ๋ก๊ทธ๋๋ฐ์์ ? input๊ฐ์ ํตํด output๊ฐ์ ์ป๊ธฐ ์ํ ๊ณ์ฐ ๊ณผ์ ์ ๋ ฅ(Input) ์๊ณ ๋ฆฌ์ฆ์ ์ถ๋ ฅ์ ํ์ํ ์๋ฃ๋ฅผ ์ ๋ ฅ๋ฐ์ ์ ์์ด์ผ ํฉ๋๋ค. (๊ผญ ์ ๋ ฅ๊ฐ์ด ์์ ์๋ ์์) ์ถ๋ ฅ(Output) ์๊ณ ๋ฆฌ์ฆ์ ์คํ์ด ๋๋ฉด ์ ์ด๋ ํ ๊ฐ์ง ์ด์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋์ ์ถ๋ ฅํด์ผ ํฉ๋๋ค. ์ ํ์ฑ(Finiteness) ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ๋ช ๋ น์ด๋ฅผ ์ํํ ํ, ์ ํํ ์๊ฐ ๋ด์ ์ข ๋ฃํด์ผ ํฉ๋๋ค. ๋ช ํ์ฑ(Definiteness) ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ ๋จ๊ณ๋ ๋จ์ํ๊ณ ๋ช ํํด์ผ ํ๋ฉฐ, ๋ชจํธํด์๋ ์๋ฉ๋๋ค. ํจ์จ์ฑ(Efficiency) ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฅํ ํ ํจ์จ์ ์ด์ด์ผ ํฉ๋๋ค. (์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋๊ฐ ๋ฎ์์๋ก ..