{"id":34864,"date":"2024-11-01T09:32:53","date_gmt":"2024-11-01T09:32:53","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34864"},"modified":"2024-11-01T11:26:12","modified_gmt":"2024-11-01T11:26:12","slug":"swift-coding-test-course-minimum-spanning-tree","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34864\/","title":{"rendered":"Swift Coding Test Course, Minimum Spanning Tree"},"content":{"rendered":"<p><body><\/p>\n<article>\n<header>\n<p>In this article, we will learn about the Minimum Spanning Tree (MST) and implement an algorithm called Kruskal&#8217;s Algorithm in Swift to solve it. A minimum spanning tree is a tree that connects all the vertices in a given graph while minimizing the sum of the weights.<\/p>\n<\/header>\n<section>\n<h2>Problem Description<\/h2>\n<p>A company is trying to create a network connecting several cities. Each road between cities incurs a cost. To connect all cities while minimizing costs, what roads should the company choose?<\/p>\n<p>Given a graph containing information about cities and roads, we need to solve the problem of finding the minimum spanning tree.<\/p>\n<\/section>\n<section>\n<h2>Input Format<\/h2>\n<pre>\n            The first line contains the number of cities N (2 \u2264 N \u2264 1000) and the number of roads M (1 \u2264 M \u2264 10000).\n            Following this, M lines provide information on each road and its weight.\n            The road information is represented in the form (A, B, C), where A and B are the city numbers, and C is the road cost.\n            <\/pre>\n<\/section>\n<section>\n<h2>Output Format<\/h2>\n<pre>\n            Print the total cost required to form the minimum spanning tree.\n            <\/pre>\n<\/section>\n<section>\n<h2>Problem-Solving Process<\/h2>\n<h3>Step 1: Choosing the Algorithm<\/h3>\n<p>This problem can be solved using Kruskal&#8217;s Algorithm. Kruskal&#8217;s Algorithm sorts all the edges of the graph in ascending order of weights, then uses the Union-Find data structure to check for cycles while constructing the minimum spanning tree.<\/p>\n<h3>Step 2: Designing the Data Structure<\/h3>\n<p>To use the Union-Find data structure, we create two arrays: <strong>parent<\/strong> and <strong>rank<\/strong>. <strong>parent<\/strong> represents the parent of each node, and <strong>rank<\/strong> denotes the height of the tree. This data will be used to manage the connection status of the nodes.<\/p>\n<pre>\n            \/\/ Union-Find Structure\n            struct UnionFind {\n                var parent: [Int]\n                var rank: [Int]\n\n                init(size: Int) {\n                    parent = Array(0..<size)\n                    rank = Array(repeating: 0, count: size)\n                }\n\n                func find(_ u: Int) -> Int {\n                    if parent[u] != u {\n                        parent[u] = find(parent[u])\n                    }\n                    return parent[u]\n                }\n\n                mutating func union(_ u: Int, _ v: Int) {\n                    let rootU = find(u)\n                    let rootV = find(v)\n\n                    if rootU != rootV {\n                        if rank[rootU] > rank[rootV] {\n                            parent[rootV] = rootU\n                        } else if rank[rootU] < rank[rootV] {\n                            parent[rootU] = rootV\n                        } else {\n                            parent[rootV] = rootU\n                            rank[rootU] += 1\n                        }\n                    }\n                }\n            }\n            <\/pre>\n<h3>Step 3: Implementing Kruskal's Algorithm<\/h3>\n<p>Sort all edges based on weights, and select edges in order only if they do not form a cycle. Through this process, we will construct the minimum spanning tree and calculate the sum of the weights at that time.<\/p>\n<pre>\n            func kruskal(n: Int, edges: [(Int, Int, Int)]) -> Int {\n                var uf = UnionFind(size: n)\n                var totalCost = 0\n                let sortedEdges = edges.sorted { $0.2 < $1.2 }\n                \n                for edge in sortedEdges {\n                    let (u, v, cost) = edge\n                    if uf.find(u) != uf.find(v) {\n                        uf.union(u, v)\n                        totalCost += cost\n                    }\n                }\n                return totalCost\n            }\n            <\/pre>\n<h3>Step 4: Testing and Conclusion<\/h3>\n<p>Now let's take input, pass it to the kruskal function, and print the result.<\/p>\n<pre>\n            let n = 4\n            let edges = [(0, 1, 10), (0, 2, 6), (0, 3, 5), (1, 3, 15), (2, 3, 4)]\n            let minCost = kruskal(n: n, edges: edges)\n            print(\"Cost of the minimum spanning tree: \\(minCost)\")\n            <\/pre>\n<p>The above example prints the total cost of the minimum spanning tree.<\/p>\n<\/section>\n<footer>\n<h2>In Conclusion<\/h2>\n<p>In this lecture, we learned how to solve the minimum spanning tree problem using Kruskal's Algorithm. Since this problem frequently appears in actual coding tests, it is important to practice repeatedly to improve your proficiency.<\/p>\n<\/footer>\n<\/article>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article, we will learn about the Minimum Spanning Tree (MST) and implement an algorithm called Kruskal&#8217;s Algorithm in Swift to solve it. A minimum spanning tree is a tree that connects all the vertices in a given graph while minimizing the sum of the weights. Problem Description A company is trying to create &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34864\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Swift Coding Test Course, Minimum Spanning Tree&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[129],"tags":[],"class_list":["post-34864","post","type-post","status-publish","format-standard","hentry","category-swift-coding-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Swift Coding Test Course, Minimum Spanning Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/34864\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Swift Coding Test Course, Minimum Spanning Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this article, we will learn about the Minimum Spanning Tree (MST) and implement an algorithm called Kruskal&#8217;s Algorithm in Swift to solve it. A minimum spanning tree is a tree that connects all the vertices in a given graph while minimizing the sum of the weights. Problem Description A company is trying to create &hellip; \ub354 \ubcf4\uae30 &quot;Swift Coding Test Course, Minimum Spanning Tree&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34864\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:32:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:26:12+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/34864\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34864\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Swift Coding Test Course, Minimum Spanning Tree\",\"datePublished\":\"2024-11-01T09:32:53+00:00\",\"dateModified\":\"2024-11-01T11:26:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34864\/\"},\"wordCount\":318,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Swift Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34864\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34864\/\",\"name\":\"Swift Coding Test Course, Minimum Spanning Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:32:53+00:00\",\"dateModified\":\"2024-11-01T11:26:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34864\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34864\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34864\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Swift Coding Test Course, Minimum Spanning Tree\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Swift Coding Test Course, Minimum Spanning Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/34864\/","og_locale":"ko_KR","og_type":"article","og_title":"Swift Coding Test Course, Minimum Spanning Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this article, we will learn about the Minimum Spanning Tree (MST) and implement an algorithm called Kruskal&#8217;s Algorithm in Swift to solve it. A minimum spanning tree is a tree that connects all the vertices in a given graph while minimizing the sum of the weights. Problem Description A company is trying to create &hellip; \ub354 \ubcf4\uae30 \"Swift Coding Test Course, Minimum Spanning Tree\"","og_url":"https:\/\/atmokpo.com\/w\/34864\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:32:53+00:00","article_modified_time":"2024-11-01T11:26:12+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"3\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/34864\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34864\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Swift Coding Test Course, Minimum Spanning Tree","datePublished":"2024-11-01T09:32:53+00:00","dateModified":"2024-11-01T11:26:12+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34864\/"},"wordCount":318,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Swift Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34864\/","url":"https:\/\/atmokpo.com\/w\/34864\/","name":"Swift Coding Test Course, Minimum Spanning Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:32:53+00:00","dateModified":"2024-11-01T11:26:12+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34864\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34864\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34864\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Swift Coding Test Course, Minimum Spanning Tree"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34864","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=34864"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34864\/revisions"}],"predecessor-version":[{"id":34865,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34864\/revisions\/34865"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34864"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34864"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34864"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}