{"id":34798,"date":"2024-11-01T09:32:07","date_gmt":"2024-11-01T09:32:07","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34798"},"modified":"2024-11-01T11:26:29","modified_gmt":"2024-11-01T11:26:29","slug":"swift-coding-test-course-finding-the-number-of-connected-components","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34798\/","title":{"rendered":"Swift Coding Test Course, Finding the Number of Connected Components"},"content":{"rendered":"<p><body><\/p>\n<article>\n<section>\n<h2>Problem Description<\/h2>\n<p>This is a problem of counting the number of connected components in a given graph. A connected component refers to a set of vertices that are connected to each other in the graph. For example, if A is connected to B and B is connected to C, then A, B, and C are considered one connected component. This problem can be solved using graph traversal techniques such as DFS (Depth First Search) or BFS (Breadth First Search).<\/p>\n<h3>Input Format<\/h3>\n<pre>\n            The first line contains the number of vertices N (1 \u2264 N \u2264 1000) and the number of edges M (0 \u2264 M \u2264 100,000).\n            The next M lines contain the information of each edge. Each edge is represented as a pair of two vertices.\n            <\/pre>\n<h3>Output Format<\/h3>\n<pre>\n            Output the number of connected components.\n            <\/pre>\n<\/section>\n<section>\n<h2>Example<\/h2>\n<h3>Input<\/h3>\n<pre>\n            5 3\n            1 2\n            2 3\n            4 5\n            <\/pre>\n<h3>Output<\/h3>\n<pre>\n            2\n            <\/pre>\n<p>In the example above, 1, 2, and 3 form one connected component, and 4 and 5 form another connected component, resulting in a total of 2 connected components.<\/p>\n<\/section>\n<section>\n<h2>Solution Process<\/h2>\n<p>To solve this problem, we will implement DFS in Swift to calculate the connected components.<\/p>\n<h3>1. Graph Representation<\/h3>\n<p>We represent the graph in the form of an adjacency list based on the input. An adjacency list is a method of storing each vertex&#8217;s connected vertices in a list. This method is memory efficient and makes traversal easier.<\/p>\n<h3>2. DFS Implementation<\/h3>\n<p>We perform the search using the DFS algorithm. We track visited vertices using a stack. If the current vertex has not been visited yet, we mark it as visited and explore all connected vertices using DFS. This marks the end of one connected component.<\/p>\n<h3>3. Count Connected Components<\/h3>\n<p>We increase the count each time we discover a new connected component whenever we visit all vertices of the graph. After visiting all the vertices, we output the final counted value.<\/p>\n<h3>4. Implementation in Swift<\/h3>\n<pre>\n            import Foundation\n\n            \/\/ Structure to represent the graph\n            class Graph {\n                var adjacencyList: [[Int]]\n                var visited: [Bool]\n                var vertexCount: Int\n\n                init(vertexCount: Int) {\n                    self.vertexCount = vertexCount\n                    self.adjacencyList = Array(repeating: [], count: vertexCount + 1)\n                    self.visited = Array(repeating: false, count: vertexCount + 1)\n                }\n\n                func addEdge(_ u: Int, _ v: Int) {\n                    adjacencyList[u].append(v)\n                    adjacencyList[v].append(u) \/\/ Undirected graph\n                }\n\n                func dfs(_ vertex: Int) {\n                    visited[vertex] = true \/\/ Mark current vertex as visited\n                    for neighbor in adjacencyList[vertex] {\n                        if !visited[neighbor] {\n                            dfs(neighbor) \/\/ Recursive call\n                        }\n                    }\n                }\n\n                func countConnectedComponents() -> Int {\n                    var componentCount = 0\n                    for vertex in 1...vertexCount {\n                        if !visited[vertex] {\n                            dfs(vertex) \/\/ New connected component found\n                            componentCount += 1\n                        }\n                    }\n                    return componentCount\n                }\n            }\n\n            \/\/ Taking input\n            let firstLine = readLine()!.split(separator: \" \").map { Int($0)! }\n            let n = firstLine[0]\n            let m = firstLine[1]\n            let graph = Graph(vertexCount: n)\n\n            for _ in 0..<m {\n                let edge = readLine()!.split(separator: \" \").map { Int($0)! }\n                graph.addEdge(edge[0], edge[1])\n            }\n            let result = graph.countConnectedComponents()\n            print(result)\n<\/pre>\n<\/section>\n<section>\n<h2>Time Complexity<\/h2>\n<p>The time complexity of this algorithm is O(N + M). N is the number of vertices, and M is the number of edges. This is because we visit all vertices and explore all edges. This time complexity is typical for DFS or BFS algorithms.<\/p>\n<\/section>\n<section>\n<h2>Conclusion<\/h2>\n<p>The problem of counting the number of connected components can be effectively solved using graph traversal techniques like DFS or BFS. Through this problem, we have addressed the basic concepts of graphs and had the opportunity to actually implement the code using Swift. I hope that the process of implementing the algorithm has deepened your understanding of data structures and algorithms.<\/p>\n<\/section>\n<\/article>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem Description This is a problem of counting the number of connected components in a given graph. A connected component refers to a set of vertices that are connected to each other in the graph. For example, if A is connected to B and B is connected to C, then A, B, and C are &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34798\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Swift Coding Test Course, Finding the Number of Connected Components&#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-34798","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, Finding the Number of Connected Components - \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\/34798\/\" \/>\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, Finding the Number of Connected Components - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Problem Description This is a problem of counting the number of connected components in a given graph. A connected component refers to a set of vertices that are connected to each other in the graph. For example, if A is connected to B and B is connected to C, then A, B, and C are &hellip; \ub354 \ubcf4\uae30 &quot;Swift Coding Test Course, Finding the Number of Connected Components&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34798\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:32:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:26:29+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=\"2\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/34798\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34798\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Swift Coding Test Course, Finding the Number of Connected Components\",\"datePublished\":\"2024-11-01T09:32:07+00:00\",\"dateModified\":\"2024-11-01T11:26:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34798\/\"},\"wordCount\":368,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Swift Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34798\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34798\/\",\"name\":\"Swift Coding Test Course, Finding the Number of Connected Components - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:32:07+00:00\",\"dateModified\":\"2024-11-01T11:26:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34798\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34798\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34798\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Swift Coding Test Course, Finding the Number of Connected Components\"}]},{\"@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, Finding the Number of Connected Components - \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\/34798\/","og_locale":"ko_KR","og_type":"article","og_title":"Swift Coding Test Course, Finding the Number of Connected Components - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Problem Description This is a problem of counting the number of connected components in a given graph. A connected component refers to a set of vertices that are connected to each other in the graph. For example, if A is connected to B and B is connected to C, then A, B, and C are &hellip; \ub354 \ubcf4\uae30 \"Swift Coding Test Course, Finding the Number of Connected Components\"","og_url":"https:\/\/atmokpo.com\/w\/34798\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:32:07+00:00","article_modified_time":"2024-11-01T11:26:29+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":"2\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/34798\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34798\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Swift Coding Test Course, Finding the Number of Connected Components","datePublished":"2024-11-01T09:32:07+00:00","dateModified":"2024-11-01T11:26:29+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34798\/"},"wordCount":368,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Swift Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34798\/","url":"https:\/\/atmokpo.com\/w\/34798\/","name":"Swift Coding Test Course, Finding the Number of Connected Components - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:32:07+00:00","dateModified":"2024-11-01T11:26:29+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34798\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34798\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34798\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Swift Coding Test Course, Finding the Number of Connected Components"}]},{"@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\/34798","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=34798"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34798\/revisions"}],"predecessor-version":[{"id":34799,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34798\/revisions\/34799"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}