๐Ÿ’ป Dev & CSAlgorithm & Coding Test

Kruskal's Algorithm ๊ตฌํ˜„ 2 (Method applying the Collapse Rule)

ํ”„๋กœ๊ทธ๋žจ ๊ฐœ์š” : C ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ Kruskal's Algorithm(Kruskal Algorithm) ๊ตฌํ˜„. ๋ถ•๊ดด๋ฒ•์น™์„ ์ ์šฉํ•˜์ง€ ์•Š์€ Kruskal's Algorithm. ๋ถ•๊ดด๋ฒ•์น™์„ ์ ์šฉํ•œ Kruskal's Algorithm ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ ๋ฐ ์„ค๊ณ„: ์ด์ „ ๊ธ€๊ณผ ์ด์–ด์ง€๋Š” ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐ์™€ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ๋งํฌ์—์„œ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2021.04.09 - [์•Œ๊ณ ๋ฆฌ์ฆ˜] - Kruskal's Algorithm ๊ตฌํ˜„ 1 (Method without applying the Collapse Rule) ์ฐธ๊ณ ๋กœ ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ๋ถ•๊ดด๋ฒ•์น™(collapsing rule)์„ ์ ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋Š”๋ฐ, ๋ถ•๊ดด๋ฒ•์น™์ด๋ž€ ์ž„์˜์˜ ๋…ธ๋“œ i์— ๋Œ€ํ•ด find ์—ฐ์‚ฐ์„ ํ•œ๋‹ค๊ณ  ํ•˜์˜€์„ ๋•Œ, ์ •์ƒ์ ์œผ๋กœ ๋ฃจํŠธ๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด i๋ถ€ํ„ฐ ๋ฃจํŠธ๊นŒ์ง€์˜ ๊ฒฝ๋กœ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ๊ทธ ๋ฃจํŠธ์˜ ์ž์‹์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, i์— ๋Œ€ํ•ด find ์—ฐ์‚ฐ์„ ํ•œ ๋ฒˆ ํ•˜์˜€๋‹ค๋ฉด ๊ทธ ์ดํ›„๋ถ€ํ„ฐ๋Š” i๋ถ€ํ„ฐ ๋ฃจํŠธ๊นŒ์ง€์˜ ๊ฒฝ๋กœ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ํ•œ ๋ฒˆ์— ์ž์‹ ์˜ ๋ฃจํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด ๋ฉ๋‹ˆ๋‹ค. ...

April 9, 2021 ยท 9 min ยท Sobamemil
๐Ÿ’ป Dev & CSAlgorithm & Coding Test

Kruskal's Algorithm ๊ตฌํ˜„ 1 (Method without applying the Collapse Rule)

ํ”„๋กœ๊ทธ๋žจ ๊ฐœ์š” : C ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ Kruskal's Algorithm(Kruskal Algorithm) ๊ตฌํ˜„. ๋ถ•๊ดด๋ฒ•์น™์„ ์ ์šฉํ•˜์ง€ ์•Š์€ Kruskal's Algorithm. ๋ถ•๊ดด๋ฒ•์น™์„ ์ ์šฉํ•œ Kruskal's Algorithm Kruskal's Algorithm์— ๋Œ€ํ•œ Explanation์€ ์•„๋ž˜ ๋งํฌ์˜ ์ด์ „ ๊ธ€์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2020.07.02 - [์•Œ๊ณ ๋ฆฌ์ฆ˜] - ํฌ๋Ÿฌ์Šค์ปฌ(Kruskal) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด ๊ธ€์—์„œ๋Š” ์˜ˆ๋กœ ์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•ด์„œ Kruskal's Algorithm์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„ : Input File: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” .txt ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. [graphInf.txt 0.00MB](https://blog.kakaocdn.net/dna/9GWpl/btq2iFfdTGn/AAAAAAAAAAAAAAAAAAAAAPR1afPSYRSSngG_pTeKxCHZPt50vsapwyoi0hUqhYlq/graphInf.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1788188399&allow_ip=&allow_referer=&signature=tBqiAllXzExVIgPQgq2UUYjZeLk%3D&attach=1&knm=tfile.txt) ํ”„๋กœ๊ทธ๋žจ Execution Result: ๋ถ•๊ดด๋ฒ•์น™์„ ์ ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ...

April 9, 2021 ยท 9 min ยท Sobamemil
๐Ÿ’ป Dev & CSAlgorithm & Coding Test

Kruskal's Minimum Spanning Tree Algorithm

ํฌ๋Ÿฌ์Šค์ปฌ(Kruskal) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€? Kruskal's Algorithm์€ ์ตœ์†Œ ๋น„์šฉ ์‹ ์žฅ ๊ทธ๋ž˜ํ”„๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…๋‹ˆ๋‹ค. ๋ณ€์˜ ๊ฐœ์ˆ˜๋ฅผ E, ๊ผญ์ง€์ ์˜ ๊ฐœ์ˆ˜๋ฅผ V๋ผ๊ณ  ํ•œ๋‹ค๋ฉด Kruskal's Algorithm์€ O(ElogV)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ํฌ๋Ÿฌ์Šค์ปฌ์˜ MST(์š•์‹ฌ์Ÿ์ด ๋ฐฉ๋ฒ•) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ„๋žต Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 edge_set kruskal_MST(edge_set E, int n) { sort(E); // ๊ฐ„์„  ์ •๋ ฌ edge_set MST_E = { }; for (i=0; i<n; i++) init_set(i); // n๊ฐœ์˜ ์ง‘ํ•ฉ(ํŠธ๋ฆฌ)์„ ์ƒ์„ฑ while(MST_E์˜ ๊ฐ„์„  ์ˆ˜ < n - 1) { (u, v) = E์˜ ์ตœ์†Œ ๊ฐ€์ค‘์น˜ ๊ฐ„์„ ; E = E - {(u, v)}; if(find(u) != find(v)) // u์™€ v๊ฐ€ ๋‹ค๋ฅธ ์ง‘ํ•ฉ(ํŠธ๋ฆฌ) ์›์†Œ { MST_E = MST_E โˆช {(u, v)}; // ๊ฐ„์„  ์ถ”๊ฐ€ union(u, v); // ๋‘ ์ง‘ํ•ฉ(ํŠธ๋ฆฌ)์„ ํ•ฉ๋ณ‘ } } return MST_E; } - ์˜ˆ์ œ - ...

July 2, 2020 ยท 2 min ยท Sobamemil
๐Ÿ’ป Dev & CS

Merge Sort Algorithm

ํ•ฉ๋ณ‘ ์ •๋ ฌ(Merge Sort)์ด๋ž€? ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜(=Divide and conquer algorithm ์ฆ‰, ๊ทธ๋Œ€๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.)์˜ ํ•˜๋‚˜๋กœ O(n log n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ฉ๋ณ‘ ์ •๋ ฌ์˜ ์ž‘๋™ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 1 ์ดํ•˜์ด๋ฉด ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒƒ์œผ๋กœ ๋ณธ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๋ถ„ํ• (divide) : ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ž˜๋ผ ๋น„์Šทํ•œ ํฌ๊ธฐ์˜ ๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ •๋ณต(conquer) : ๊ฐ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ•ฉ๋ณ‘ ์ •๋ ฌ์„ ์ด์šฉํ•ด ์ •๋ ฌํ•œ๋‹ค. ๊ฒฐํ•ฉ(combine) : ๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋กœ ํ•ฉ๋ณ‘ํ•œ๋‹ค. ์ด๋•Œ ์ •๋ ฌ ๊ฒฐ๊ณผ๊ฐ€ ์ž„์‹œ๋ฐฐ์—ด์— ์ €์žฅ๋œ๋‹ค. ๋ณต์‚ฌ(copy) : ์ž„์‹œ ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๊ฒฐ๊ณผ๋ฅผ ์›๋ž˜ ๋ฐฐ์—ด์— ๋ณต์‚ฌํ•œ๋‹ค. ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๊ฐ„๋‹ค๋ฉด ์•„๋ž˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ†ตํ•ด ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ...

March 18, 2020 ยท 3 min ยท Sobamemil
๐Ÿ’ป Dev & CS

Insertion Sort Algorithm

์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort)์ด๋ž€? ์ž๋ฃŒ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ถ€๋ถ„๊ณผ ๋น„๊ตํ•˜์—ฌ, ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ์‚ฝ์ž…ํ•จ์œผ๋กœ์จ ์ •๋ ฌ์„ ์™„์„ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์‚ฝ์ž… ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n2)์ด๋ฉฐ ์•ˆ์ • ์ •๋ ฌ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฐ์—ด์ด ๊ธธ์–ด์งˆ์ˆ˜๋ก ํšจ์œจ์ด ๋งค์šฐ ๋–จ์–ด์ง€์ง€๋งŒ ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฝ์ž… ์ •๋ ฌ์˜ ์˜ˆ ์‚ฝ์ž… ์ •๋ ฌ์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ -Simpsons contributor- ์‚ฝ์ž… ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ์˜์‚ฌ์ฝ”๋“œ(Pseudocode)๋กœ ๋จผ์ € ์ดํ•ด๋ฅผ ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Pseudocode : 1 2 3 4 5 6 7 8 9 //InsertionSort pseudo code InsertionSort(A,n) // sort A[1...n] for j <- 2 to n do key <- A[j] i <- j-1 while i>0 and A[i]>key do A[i+1] <- A[i] i <- i-1 A[i+1] <- key CCode: ...

March 17, 2020 ยท 3 min ยท Sobamemil