{"id":34976,"date":"2024-11-01T09:34:11","date_gmt":"2024-11-01T09:34:11","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34976"},"modified":"2024-11-01T12:52:53","modified_gmt":"2024-11-01T12:52:53","slug":"%ec%bd%94%ed%8b%80%eb%a6%b0-%ec%bd%94%eb%94%a9%ed%85%8c%ec%8a%a4%ed%8a%b8-%ea%b0%95%ec%a2%8c-%eb%84%88%eb%b9%84-%ec%9a%b0%ec%84%a0-%ed%83%90%ec%83%89-2","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34976\/","title":{"rendered":"Kotlin coding test course, breadth-first search"},"content":{"rendered":"<p><body><\/p>\n<h2>1. Problem Description<\/h2>\n<p>This problem is to find the shortest path between two nodes in a given graph. The graph is presented in the form of an adjacency list, providing the number of nodes and the information of nodes connected to each node. Your goal is to output the shortest path from a specific start node to a specific target node.<\/p>\n<h3>Problem<\/h3>\n<pre><code>\nInput:\n- First line: Number of vertices N (1 \u2264 N \u2264 1000)\n- Second line: Number of edges M (0 \u2264 M \u2264 10000)\n- Next M lines: Edge information (A B) - A and B represent the two connected nodes\n\n- The last line gives the start node S and the target node T.\n\nOutput:\n- Print the list of nodes in the path from S to T. If there is no path, print \"PATH NOT FOUND!\".\n<\/code><\/pre>\n<h2>2. Problem Approach<\/h2>\n<p>This problem can be solved using a typical BFS algorithm. BFS is a breadth-first search method that explores nodes close to the start node first. This allows for finding the shortest path. The main characteristics of the BFS algorithm are as follows:<\/p>\n<ul>\n<li>It explores all nodes at the same depth, guaranteeing the shortest path.<\/li>\n<li>Implemented using a queue, it theoretically has a time complexity of O(V + E), where V is the number of nodes and E is the number of edges.<\/li>\n<\/ul>\n<h3>BFS Algorithm Steps<\/h3>\n<ul>\n<li><strong>Initialization:<\/strong> Mark the start node as visited and initialize distances. Insert the start node into the queue.<\/li>\n<li><strong>Exploration Process:<\/strong> Repeat while the queue is not empty. Remove a node from the queue and add unvisited adjacent nodes to the queue.<\/li>\n<li><strong>Path Tracking:<\/strong> Record the parent node of each node to allow for path tracking later.<\/li>\n<\/ul>\n<h2>3. Kotlin Code Implementation<\/h2>\n<p>Now, let&#8217;s implement BFS in Kotlin according to the approach above. Refer to the code below to see how to solve the given problem.<\/p>\n<pre><code class=\"language-kotlin\">\nimport java.util.*\n\ndata class Edge(val to: Int, val weight: Int)\n\nfun bfs(graph: List<list<edge>&gt;, start: Int, target: Int): List<int>? {\n    val queue: Queue<int> = LinkedList()\n    val visited = BooleanArray(graph.size)\n    val parent = IntArray(graph.size) { -1 }  \/\/ Track parent nodes\n    queue.add(start)\n    visited[start] = true\n\n    while (queue.isNotEmpty()) {\n        val current = queue.poll()\n\n        \/\/ Trace back the path if the target node is found\n        if (current == target) {\n            return tracePath(parent, start, target)\n        }\n\n        for (edge in graph[current]) {\n            if (!visited[edge.to]) {\n                visited[edge.to] = true\n                parent[edge.to] = current \/\/ Set parent node\n                queue.add(edge.to)\n            }\n        }\n    }\n    return null \/\/ No path found\n}\n\nfun tracePath(parent: IntArray, start: Int, target: Int): List<int> {\n    val path = mutableListOf<int>()\n    var current = target\n\n    while (current != start) {\n        path.add(current)\n        current = parent[current]\n    }\n    path.add(start)\n    path.reverse()  \/\/ Reverse the list as it was added in reverse order\n    return path\n}\n\nfun main() {\n    val scanner = Scanner(System.`in`)\n    val n = scanner.nextInt()\n    val m = scanner.nextInt()\n    val graph = List(n) { mutableListOf<edge>() }\n\n    \/\/ Create the graph\n    for (i in 0 until m) {\n        val a = scanner.nextInt() - 1\n        val b = scanner.nextInt() - 1\n        graph[a].add(Edge(b, 1)) \/\/ Undirected graph, so add both ways\n        graph[b].add(Edge(a, 1))\n    }\n\n    val start = scanner.nextInt() - 1\n    val target = scanner.nextInt() - 1\n    val result = bfs(graph, start, target)\n\n    if (result != null) {\n        println(result.joinToString(\" \"))\n    } else {\n        println(\"PATH NOT FOUND!\")\n    }\n}\n<\/edge><\/int><\/int><\/int><\/int><\/list<edge><\/code><\/pre>\n<h2>4. Example Input and Output<\/h2>\n<h3>Example 1<\/h3>\n<pre><code>\nInput:\n5 4\n1 2\n1 3\n2 4\n3 5\n1 5\n\nOutput:\n1 3 5\n<\/code><\/pre>\n<h3>Example 2<\/h3>\n<pre><code>\nInput:\n5 3\n1 2\n2 3\n4 5\n1 4\n\nOutput:\nPATH NOT FOUND!\n<\/code><\/pre>\n<h2>5. Conclusion<\/h2>\n<p>In this tutorial, we addressed the problem of finding the shortest path between two nodes in a graph using breadth-first search (BFS). Due to the ease of exploration provided by BFS, it is widely useful in many algorithmic problems. It is essential to develop the ability to effectively utilize BFS to solve problems in actual exams or coding tests.<\/p>\n<p>Now, we encourage you to tackle various problems using BFS. Enhance your understanding of algorithms through implementation in Kotlin, and develop the skills that can also be applied in real-world scenarios!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Problem Description This problem is to find the shortest path between two nodes in a given graph. The graph is presented in the form of an adjacency list, providing the number of nodes and the information of nodes connected to each node. Your goal is to output the shortest path from a specific start &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34976\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Kotlin coding test course, breadth-first search&#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":[106],"tags":[],"class_list":["post-34976","post","type-post","status-publish","format-standard","hentry","category----en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kotlin coding test course, breadth-first search - \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\/34976\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kotlin coding test course, breadth-first search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"1. Problem Description This problem is to find the shortest path between two nodes in a given graph. The graph is presented in the form of an adjacency list, providing the number of nodes and the information of nodes connected to each node. Your goal is to output the shortest path from a specific start &hellip; \ub354 \ubcf4\uae30 &quot;Kotlin coding test course, breadth-first search&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34976\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:34:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T12:52:53+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\/34976\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34976\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Kotlin coding test course, breadth-first search\",\"datePublished\":\"2024-11-01T09:34:11+00:00\",\"dateModified\":\"2024-11-01T12:52:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34976\/\"},\"wordCount\":334,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Kotlin coding test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34976\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34976\/\",\"name\":\"Kotlin coding test course, breadth-first search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:34:11+00:00\",\"dateModified\":\"2024-11-01T12:52:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34976\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34976\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34976\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kotlin coding test course, breadth-first search\"}]},{\"@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":"Kotlin coding test course, breadth-first search - \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\/34976\/","og_locale":"ko_KR","og_type":"article","og_title":"Kotlin coding test course, breadth-first search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"1. Problem Description This problem is to find the shortest path between two nodes in a given graph. The graph is presented in the form of an adjacency list, providing the number of nodes and the information of nodes connected to each node. Your goal is to output the shortest path from a specific start &hellip; \ub354 \ubcf4\uae30 \"Kotlin coding test course, breadth-first search\"","og_url":"https:\/\/atmokpo.com\/w\/34976\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:34:11+00:00","article_modified_time":"2024-11-01T12:52:53+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\/34976\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34976\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Kotlin coding test course, breadth-first search","datePublished":"2024-11-01T09:34:11+00:00","dateModified":"2024-11-01T12:52:53+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34976\/"},"wordCount":334,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Kotlin coding test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34976\/","url":"https:\/\/atmokpo.com\/w\/34976\/","name":"Kotlin coding test course, breadth-first search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:34:11+00:00","dateModified":"2024-11-01T12:52:53+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34976\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34976\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34976\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Kotlin coding test course, breadth-first search"}]},{"@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\/34976","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=34976"}],"version-history":[{"count":2,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34976\/revisions"}],"predecessor-version":[{"id":38111,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34976\/revisions\/38111"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}