{"id":33934,"date":"2024-11-01T09:22:09","date_gmt":"2024-11-01T09:22:09","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33934"},"modified":"2024-11-01T10:54:59","modified_gmt":"2024-11-01T10:54:59","slug":"c-coding-test-course-pathfinding","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33934\/","title":{"rendered":"C# Coding Test Course, Pathfinding"},"content":{"rendered":"<p><body><\/p>\n<p>Hello! In this article, we will discuss one of the algorithm problems that frequently appears in coding tests, the <strong>Path Finding<\/strong> problem. This tutorial will explain the definition of the problem, the solution, C# code implementation, and more. We will start with the fundamentals of the necessary algorithms and explore how to apply complex pathfinding algorithms.<\/p>\n<h2>Problem Definition<\/h2>\n<p>The problem is as follows:<\/p>\n<blockquote>\n<p>Find the shortest path from the starting point S to the endpoint E in a given 2D grid. The grid consists of 0s and 1s, where 0 represents a traversable cell and 1 represents a wall. The path can only move to adjacent cells in up, down, left, or right directions. If a path exists, return the length of the shortest path; if not, return -1.<\/p>\n<\/blockquote>\n<h2>Example<\/h2>\n<p>Here are the example inputs and outputs:<\/p>\n<pre>\nInput:\ngrid = [\n  [0, 0, 1, 0, 0],\n  [0, 0, 0, 0, 1],\n  [0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0],\n  [1, 1, 1, 1, 0]\n]\nstart = (0, 0)  \/\/ Position of S\nend = (4, 4)    \/\/ Position of E\n\nOutput:\nLength of the shortest path = 8\n<\/pre>\n<h2>Approach to Problem Solving<\/h2>\n<p>There are various methods to solve the problem, but we will use the <strong>BFS (Breadth-First Search)<\/strong> algorithm. BFS is very effective in solving shortest path problems. It explores the current node and its adjacent nodes in turn, returning the shortest path after exploring all nodes.<\/p>\n<h3>Algorithm Explanation<\/h3>\n<p>The basic structure of the BFS algorithm is as follows:<\/p>\n<ol>\n<li>Put the starting point in the queue and mark it as visited.<\/li>\n<li>Repeat while the queue is not empty:<\/li>\n<ul>\n<li>Dequeue the current position from the queue.<\/li>\n<li>If the current position is the endpoint, return the length of the shortest path.<\/li>\n<li>Check all adjacent cells of the current position:<\/li>\n<ul>\n<li>If the cell is traversable and not visited, add it to the queue and mark it as visited.<\/li>\n<\/ul>\n<\/ul>\n<li>If the endpoint is not reached after exploring all paths, return -1.<\/li>\n<\/ol>\n<h2>C# Code Implementation<\/h2>\n<p>Now, let&#8217;s implement the algorithm described above in C# code.<\/p>\n<pre><code class=\"language-csharp\">\nusing System;\nusing System.Collections.Generic;\n\nclass Program {\n    public static int ShortestPath(int[,] grid, (int, int) start, (int, int) end) {\n        int rows = grid.GetLength(0);\n        int cols = grid.GetLength(1);\n        \n        int[] directions = {0, 1, 0, -1, 0}; \/\/ Up, Down, Left, Right movements\n\n        Queue&lt;((int, int), int)&gt; queue = new Queue&lt;((int, int), int)&gt;();\n        bool[,] visited = new bool[rows, cols];\n        \n        queue.Enqueue((start, 0)); \/\/ (position, length of the path)\n        visited[start.Item1, start.Item2] = true;\n\n        while (queue.Count &gt; 0) {\n            var (current, length) = queue.Dequeue();\n\n            if (current == end) {\n                return length;\n            }\n\n            for (int i = 0; i &lt; 4; i++) {\n                int newRow = current.Item1 + directions[i];\n                int newCol = current.Item2 + directions[i + 1];\n\n                if (newRow &gt;= 0 &amp;&amp; newRow &lt; rows &amp;&amp; newCol &gt;= 0 &amp;&amp; newCol &lt; cols &amp;&amp; \n                    grid[newRow, newCol] == 0 &amp;&amp; !visited[newRow, newCol]) {\n                    \n                    queue.Enqueue(((newRow, newCol), length + 1));\n                    visited[newRow, newCol] = true;\n                }\n            }\n        }\n\n        return -1; \/\/ If unable to reach the endpoint\n    }\n\n    public static void Main() {\n        int[,] grid = {\n            {0, 0, 1, 0, 0},\n            {0, 0, 0, 0, 1},\n            {0, 1, 1, 0, 0},\n            {0, 0, 0, 0, 0},\n            {1, 1, 1, 1, 0}\n        };\n        \n        var start = (0, 0);\n        var end = (4, 4);\n        int result = ShortestPath(grid, start, end);\n        Console.WriteLine(\"Length of the shortest path: \" + result);\n    }\n}\n<\/code><\/pre>\n<h2>Code Review<\/h2>\n<p>The above code demonstrates how to find a path using the BFS algorithm. Let&#8217;s take a closer look at each part of the code.<\/p>\n<h3>Variable Explanation<\/h3>\n<ul>\n<li><code>rows<\/code> and <code>cols<\/code>: Store the number of rows and columns in the grid.<\/li>\n<li><code>directions<\/code>: Define the directions for up, down, left, and right movements.<\/li>\n<li><code>queue<\/code>: A queue for BFS that stores pairs of (position, length of the path).<\/li>\n<li><code>visited<\/code>: A 2D array that keeps track of whether each cell has been visited.<\/li>\n<\/ul>\n<h3>Functioning of the Queue<\/h3>\n<p>We dequeue the current position from the queue and check all adjacent cells, adding them to the queue if they are traversable. This process continues until we find the shortest path.<\/p>\n<h2>Performance Analysis<\/h2>\n<p>The time complexity of this algorithm is <strong>O(V + E)<\/strong>, where V is the number of vertices (all cells in the 2D grid) and E is the number of edges (the number of adjacent cells). The space complexity is <strong>O(V)<\/strong>, which accounts for the space required for the BFS queue and visit tracking.<\/p>\n<h2>Conclusion<\/h2>\n<p>In this article, we discussed the pathfinding problem using C#. We explained the process of finding the shortest path using the BFS algorithm and implemented it in code. When solving algorithmic problems, it is important to understand the problem accurately and select the appropriate algorithm for the approach. I hope you can improve your skills through various problems!<\/p>\n<p>Thank you!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello! In this article, we will discuss one of the algorithm problems that frequently appears in coding tests, the Path Finding problem. This tutorial will explain the definition of the problem, the solution, C# code implementation, and more. We will start with the fundamentals of the necessary algorithms and explore how to apply complex pathfinding &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33934\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;C# Coding Test Course, Pathfinding&#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":[90],"tags":[],"class_list":["post-33934","post","type-post","status-publish","format-standard","hentry","category-c-coding-test-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C# Coding Test Course, Pathfinding - \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\/33934\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C# Coding Test Course, Pathfinding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! In this article, we will discuss one of the algorithm problems that frequently appears in coding tests, the Path Finding problem. This tutorial will explain the definition of the problem, the solution, C# code implementation, and more. We will start with the fundamentals of the necessary algorithms and explore how to apply complex pathfinding &hellip; \ub354 \ubcf4\uae30 &quot;C# Coding Test Course, Pathfinding&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33934\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:22:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T10:54:59+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=\"4\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33934\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33934\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"C# Coding Test Course, Pathfinding\",\"datePublished\":\"2024-11-01T09:22:09+00:00\",\"dateModified\":\"2024-11-01T10:54:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33934\/\"},\"wordCount\":521,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"C# Coding Test Tutorials\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33934\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33934\/\",\"name\":\"C# Coding Test Course, Pathfinding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:22:09+00:00\",\"dateModified\":\"2024-11-01T10:54:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33934\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33934\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33934\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# Coding Test Course, Pathfinding\"}]},{\"@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":"C# Coding Test Course, Pathfinding - \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\/33934\/","og_locale":"ko_KR","og_type":"article","og_title":"C# Coding Test Course, Pathfinding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! In this article, we will discuss one of the algorithm problems that frequently appears in coding tests, the Path Finding problem. This tutorial will explain the definition of the problem, the solution, C# code implementation, and more. We will start with the fundamentals of the necessary algorithms and explore how to apply complex pathfinding &hellip; \ub354 \ubcf4\uae30 \"C# Coding Test Course, Pathfinding\"","og_url":"https:\/\/atmokpo.com\/w\/33934\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:22:09+00:00","article_modified_time":"2024-11-01T10:54:59+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":"4\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33934\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33934\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"C# Coding Test Course, Pathfinding","datePublished":"2024-11-01T09:22:09+00:00","dateModified":"2024-11-01T10:54:59+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33934\/"},"wordCount":521,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["C# Coding Test Tutorials"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33934\/","url":"https:\/\/atmokpo.com\/w\/33934\/","name":"C# Coding Test Course, Pathfinding - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:22:09+00:00","dateModified":"2024-11-01T10:54:59+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33934\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33934\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33934\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"C# Coding Test Course, Pathfinding"}]},{"@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\/33934","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=33934"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33934\/revisions"}],"predecessor-version":[{"id":33935,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33934\/revisions\/33935"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}