๋ชฉ๋กDEV_IN/Algorithm (13)

let's get IT with DAVINA ๐Ÿ’ป

์ž๋ฃŒ๊ตฌ์กฐ/๊ทธ๋ž˜ํ”„/BFS

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:..

DEV_IN/Algorithm 2023. 3. 21. 14:21
[์ž๋ฃŒ๊ตฌ์กฐ/์„ ํ˜•๊ตฌ์กฐ] ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์›์†Œ๋“ค์„ ์ €์žฅํ•  ๋•Œ ๊ทธ ๋‹ค์Œ ์›์†Œ๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์„ฑ์งˆ k๋ฒˆ์งธ ์›์†Œ๋ฅผ ํ™•์ธ/๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด O(k)๊ฐ€ ํ•„์š”ํ•จ ์šฐ๋ฆฌ๋Š” ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ์ฃผ์†Œ๋งŒ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ, ์ฐจ๊ทผ์ฐจ๊ทผ ๋‹ค์Œ ์ฃผ์†Œ๋กœ ๋„˜์–ด๊ฐ€๋ฉฐ ์ฐพ์•„์•ผ ํ•จ ์ž„์˜์˜ ์œ„์น˜์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐ๋Š” O(1) ์ด์ „ ์›์†Œ์— ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝ๋งŒ ํ•ด์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ, ์ถ”๊ฐ€/์ œ๊ฑฐ ํ•˜๊ณ  ์‹ถ์€ ์œ„์น˜์˜ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ O(1) ์›์†Œ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†ํ•ด์žˆ์ง€ ์•Š์•„ Cache hit rate๊ฐ€ ๋‚ฎ์ง€๋งŒ ํ• ๋‹น์ด ๋‹ค์†Œ ์‰ฌ์›€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ข…๋ฅ˜ ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ : ๊ฐ ์›์†Œ๊ฐ€ ์ž์‹ ์˜ ๋‹ค์Œ ์›์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๋“ค๊ณ  ์žˆ์Œ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ : ๊ฐ ์›์†Œ๊ฐ€ ์ž์‹ ์˜ ์ด์ „ & ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ๋‘˜ ๋‹ค ๋“ค๊ณ  ์žˆ์Œ ์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ : ๋์ด ์ฒ˜..

DEV_IN/Algorithm 2023. 3. 8. 17:08
[์ž๋ฃŒ๊ตฌ์กฐ/์„ ํ˜•๊ตฌ์กฐ] ๋ฐฐ์—ด

๋ฐฐ์—ด ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์›์†Œ๋ฅผ ์—ฐ์†ํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐฐ์—ด์˜ ์„ฑ์งˆ 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..

DEV_IN/Algorithm 2023. 3. 8. 02:06
[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•] Greedy Algorithm

Greedy Algorithm (ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜) ์„ ํƒ์˜ ์ˆœ๊ฐ„๋งˆ๋‹ค ๋‹น์žฅ ๋ˆˆ์•ž์— ๋ณด์ด๋Š” ์ตœ์ ์˜ ์ƒํ™ฉ๋งŒ์„ ์ซ“์•„ ์ตœ์ข…์ ์ธ ํ•ด๋‹ต์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ• Greedy Algorithm ๋ฌธ์ œ ํ•ด๊ฒฐ ๋‹จ๊ณ„ ๐Ÿ”ฝ ์„ ํƒ ์ ˆ์ฐจ(Selection Procedure): ํ˜„์žฌ ์ƒํƒœ์—์„œ์˜ ์ตœ์ ์˜ ํ•ด๋‹ต์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆ์„ฑ ๊ฒ€์‚ฌ(Feasibility Check): ์„ ํƒ๋œ ํ•ด๊ฐ€ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹ต ๊ฒ€์‚ฌ(Solution Check): ์›๋ž˜์˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ , ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์„ ํƒ ์ ˆ์ฐจ๋กœ ๋Œ์•„๊ฐ€ ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. - ํƒ์š•์  ์„ ํƒ ์†์„ฑ(Greedy Choice Property) : ์•ž์˜ ์„ ํƒ์ด ์ดํ›„์˜ ์„ ํƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. - ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ(Optimal Substructure) : ๋ฌธ์ œ์— ๋Œ€ํ•œ ..

DEV_IN/Algorithm 2023. 3. 7. 01:25
์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ณต๊ฐ„ ๋ณต์žก๋„

๊ณต๊ฐ„ ๋ณต์žก๋„ (Space Complexity) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ˆ˜ํ–‰๋˜๋Š” ๋ฐ์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ด๋Ÿ‰ ํ”„๋กœ๊ทธ๋žจ์ด ์š”๊ตฌํ•˜๋Š” ๊ณต๊ฐ„ ⇒ ๊ณ ์ •์ ์ธ ๊ณต๊ฐ„ + ๊ฐ€๋ณ€์ ์ธ ๊ณต๊ฐ„ ๊ณ ์ •์ ์ธ ๊ณต๊ฐ„: ์ฒ˜๋ฆฌํ•  ๋ฐ์ดํ„ฐ์˜ ์–‘์— ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ ์š”๊ตฌ๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ์„œ, ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ ๊ฐ€๋ณ€์ ์ธ ๊ณต๊ฐ„: ์ฒ˜๋ฆฌํ•  ํ…Œ์ดํ„ฐ์˜ ์–‘์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์š”๊ตฌ๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ์คŒ! ๊ณต๊ฐ„ ๋ณต์žก๋„ ๊ณ„์‚ฐ์€ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ณ„์‚ฐ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋น… ์˜ค(Big-O) ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œํ˜„ ๋ณดํ†ต ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋ณด๋‹ค ์ค‘์š”์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. WHY? ์‹œ๊ฐ„์ด ์ ์œผ๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ๊นŒ์ง€ ์ง€์†์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—.. BUT! ๋™์  ๊ณ„ํš๋ฒ•(Dynamic Programming)๊ณผ ๊ฐ™์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ํ•˜๋“œ์›จ์–ด ํ™˜๊ฒฝ์ด ๋งค์šฐ ํ•œ์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ..

DEV_IN/Algorithm 2023. 2. 24. 19:48
์•Œ๊ณ ๋ฆฌ์ฆ˜/์‹œ๊ฐ„ ๋ณต์žก๋„

์‹œ๊ฐ„ ๋ณต์žก๋„ (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..

DEV_IN/Algorithm 2023. 2. 24. 19:41
์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€? ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ผ๋ จ์˜ ์ ˆ์ฐจ๋ฅผ ์ •์˜ํ•˜๊ณ , ๊ณต์‹ํ™”ํ•œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•œ ์ผ์ข…์˜ ๋ฌธ์ œ ํ’€์ด ๋ฐฉ๋ฒ• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„ ? input๊ฐ’์„ ํ†ตํ•ด output๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•œ ๊ณ„์‚ฐ ๊ณผ์ • ์ž…๋ ฅ(Input) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ถœ๋ ฅ์— ํ•„์š”ํ•œ ์ž๋ฃŒ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๊ผญ ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ์ˆ˜๋„ ์žˆ์Œ) ์ถœ๋ ฅ(Output) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‹คํ–‰์ด ๋˜๋ฉด ์ ์–ด๋„ ํ•œ ๊ฐ€์ง€ ์ด์ƒ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ ํ•œ์„ฑ(Finiteness) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์œ ํ•œํ•œ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„, ์œ ํ•œํ•œ ์‹œ๊ฐ„ ๋‚ด์— ์ข…๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ช…ํ™•์„ฑ(Definiteness) ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฐ ๋‹จ๊ณ„๋Š” ๋‹จ์ˆœํ•˜๊ณ  ๋ช…ํ™•ํ•ด์•ผ ํ•˜๋ฉฐ, ๋ชจํ˜ธํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ํšจ์œจ์„ฑ(Efficiency) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ€๋Šฅํ•œ ํ•œ ํšจ์œจ์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ..

DEV_IN/Algorithm 2023. 2. 24. 19:28