{"id":34590,"date":"2024-11-01T09:29:48","date_gmt":"2024-11-01T09:29:48","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34590"},"modified":"2024-11-01T11:40:35","modified_gmt":"2024-11-01T11:40:35","slug":"javascript-coding-test-course-depth-first-search","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34590\/","title":{"rendered":"JavaScript Coding Test Course, Depth First Search"},"content":{"rendered":"<p><body><\/p>\n<h2>Problem: Maze Exploration<\/h2>\n<p>This is a problem to determine whether there is a path from the starting point to the destination in the given 2D array. The values of the array are given as <code>0<\/code> (passable) and <code>1<\/code> (impassable). The starting point is (0, 0) and the destination is (N-1, M-1). Movement is allowed only up, down, left, and right, and if a path exists, it should return <code>true<\/code>; if not, it should return <code>false<\/code>.<\/p>\n<h2>Example Problem<\/h2>\n<h3>Input<\/h3>\n<pre>\n    [\n        [0, 0, 1, 0],\n        [1, 0, 1, 0],\n        [0, 0, 0, 0],\n        [0, 1, 1, 0]\n    ]\n    <\/pre>\n<h3>Output<\/h3>\n<p><code>true<\/code><\/p>\n<h3>Explanation<\/h3>\n<p>In the above example, starting from the starting point (0, 0), the path goes through (1, 1), (2, 1), (2, 2), (2, 3), (3, 3) to reach the destination (3, 3).<\/p>\n<h2>Problem Solving Process<\/h2>\n<h3>1. Overview of the Algorithm<\/h3>\n<p>This problem can be solved using the Depth First Search (DFS) algorithm. DFS is a method that goes as deep as possible into the nodes before backtracking to explore other paths. We will implement this using recursion. DFS is applied to explore the maze and check whether it is possible to reach the destination from the starting point.<\/p>\n<h3>2. Implementing the DFS Algorithm<\/h3>\n<p>To implement DFS, the following steps are necessary:<\/p>\n<ol>\n<li>Check if the current position is within bounds.<\/li>\n<li>Check if the current position is an impassable point.<\/li>\n<li>Check if the current position is the destination.<\/li>\n<li>Mark the current position as visited.<\/li>\n<li>Recursively call DFS in all four directions (up, down, left, right).<\/li>\n<li>After exploring all paths, unmark the visited position.<\/li>\n<\/ol>\n<h3>3. Code Implementation<\/h3>\n<p>The following code implements the DFS algorithm using JavaScript:<\/p>\n<pre><code>\nfunction isPathExists(maze) {\n    const rows = maze.length;\n    const cols = maze[0].length;\n\n    function dfs(x, y) {\n        \/\/ Boundary conditions\n        if (x &lt; 0 || y &lt; 0 || x &gt;= rows || y &gt;= cols) return false;\n        \/\/ Impassable point\n        if (maze[x][y] === 1) return false;\n        \/\/ Destination\n        if (x === rows - 1 &amp;&amp; y === cols - 1) return true;\n\n        \/\/ Mark current position as visited\n        maze[x][y] = 1;\n\n        \/\/ Explore DFS in four directions\n        const found = dfs(x + 1, y) || dfs(x - 1, y) || dfs(x, y + 1) || dfs(x, y - 1);\n\n        \/\/ Unmark visited position\n        maze[x][y] = 0;\n\n        return found;\n    }\n\n    return dfs(0, 0);\n}\n\n\/\/ Example Test\nconst maze = [\n    [0, 0, 1, 0],\n    [1, 0, 1, 0],\n    [0, 0, 0, 0],\n    [0, 1, 1, 0]\n];\n\nconsole.log(isPathExists(maze)); \/\/ Output: true\n<\/code><\/pre>\n<h3>4. Code Explanation<\/h3>\n<p>Let me explain the key parts of the code:<\/p>\n<ul>\n<li><strong>Boundary condition check:<\/strong> Ensures the current position does not exceed the array boundaries.<\/li>\n<li><strong>Impassable point check:<\/strong> Verifies if the value at the current position is <code>1<\/code> to determine if it is passable.<\/li>\n<li><strong>Destination reached:<\/strong> Returns <code>true<\/code> if the current position is the destination (N-1, M-1).<\/li>\n<li><strong>Mark as visited:<\/strong> Marks the current position to prevent duplicate exploration.<\/li>\n<li><strong>Recursive call:<\/strong> Calls DFS recursively in the four directions to explore the path.<\/li>\n<li><strong>Unmarking:<\/strong> Unmarks the visited position after the exploration is complete.<\/li>\n<\/ul>\n<h3>5. Time Complexity Analysis<\/h3>\n<p>The time complexity of this algorithm is O(N * M), where N is the number of rows and M is the number of columns. This is because each cell can be visited once. However, there may be additional memory required in the worst-case scenario due to stack space overhead from recursion.<\/p>\n<h2>Conclusion<\/h2>\n<p>In this tutorial, we learned how to solve the maze exploration problem using Depth First Search (DFS). DFS can be effectively used even in complex graph structures, and it can be applied to various problems. Once you understand the characteristics and workings of DFS, it is advisable to apply it to different problems. In the next tutorial, we will explore the Breadth First Search (BFS) algorithm. I hope you found this tutorial helpful.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem: Maze Exploration This is a problem to determine whether there is a path from the starting point to the destination in the given 2D array. The values of the array are given as 0 (passable) and 1 (impassable). The starting point is (0, 0) and the destination is (N-1, M-1). Movement is allowed only &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34590\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;JavaScript Coding Test Course, Depth 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":[141],"tags":[],"class_list":["post-34590","post","type-post","status-publish","format-standard","hentry","category-javascript-coding-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JavaScript Coding Test Course, Depth 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\/34590\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript Coding Test Course, Depth First Search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Problem: Maze Exploration This is a problem to determine whether there is a path from the starting point to the destination in the given 2D array. The values of the array are given as 0 (passable) and 1 (impassable). The starting point is (0, 0) and the destination is (N-1, M-1). Movement is allowed only &hellip; \ub354 \ubcf4\uae30 &quot;JavaScript Coding Test Course, Depth First Search&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34590\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:29:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:40:35+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\/34590\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34590\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"JavaScript Coding Test Course, Depth First Search\",\"datePublished\":\"2024-11-01T09:29:48+00:00\",\"dateModified\":\"2024-11-01T11:40:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34590\/\"},\"wordCount\":452,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Javascript Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34590\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34590\/\",\"name\":\"JavaScript Coding Test Course, Depth First Search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:29:48+00:00\",\"dateModified\":\"2024-11-01T11:40:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34590\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34590\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34590\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript Coding Test Course, Depth 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":"JavaScript Coding Test Course, Depth 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\/34590\/","og_locale":"ko_KR","og_type":"article","og_title":"JavaScript Coding Test Course, Depth First Search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Problem: Maze Exploration This is a problem to determine whether there is a path from the starting point to the destination in the given 2D array. The values of the array are given as 0 (passable) and 1 (impassable). The starting point is (0, 0) and the destination is (N-1, M-1). Movement is allowed only &hellip; \ub354 \ubcf4\uae30 \"JavaScript Coding Test Course, Depth First Search\"","og_url":"https:\/\/atmokpo.com\/w\/34590\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:29:48+00:00","article_modified_time":"2024-11-01T11:40:35+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\/34590\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34590\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"JavaScript Coding Test Course, Depth First Search","datePublished":"2024-11-01T09:29:48+00:00","dateModified":"2024-11-01T11:40:35+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34590\/"},"wordCount":452,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Javascript Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34590\/","url":"https:\/\/atmokpo.com\/w\/34590\/","name":"JavaScript Coding Test Course, Depth First Search - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:29:48+00:00","dateModified":"2024-11-01T11:40:35+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34590\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34590\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34590\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"JavaScript Coding Test Course, Depth 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\/34590","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=34590"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34590\/revisions"}],"predecessor-version":[{"id":34591,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34590\/revisions\/34591"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}