{"id":34410,"date":"2024-11-01T09:27:49","date_gmt":"2024-11-01T09:27:49","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34410"},"modified":"2024-11-01T11:41:22","modified_gmt":"2024-11-01T11:41:22","slug":"javascript-coding-test-course-calculating-the-amount-of-water","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34410\/","title":{"rendered":"JavaScript Coding Test Course, Calculating the Amount of Water"},"content":{"rendered":"<p><body><\/p>\n<article>\n<header>\n<p>In this lecture, we will address the problem of &#8216;Calculating the Amount of Water&#8217;, which is commonly featured in coding tests, using JavaScript. This problem will provide a great opportunity to learn various algorithm design patterns and utilize arrays effectively.<\/p>\n<\/header>\n<section>\n<h2>Problem Definition<\/h2>\n<p>The problem is to calculate the amount of water that can be collected when it rains, given an array of heights of bars. The heights of the bars are provided as each element of the array.<\/p>\n<p>For example, if the array is <code>[0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]<\/code>, the amount of water that can be collected is <strong>6<\/strong>. Visually representing how water is stored between each bar in this example is as follows:<\/p>\n<p><img decoding=\"async\" alt=\"Water Storage Visualization\" src=\"path_to_image\"\/><br \/>\n<\/section>\n<section>\n<h2>Approaches to Solve the Problem<\/h2>\n<p>There are various methods that can be used to solve this problem. The two most commonly used approaches are as follows.<\/p>\n<ol>\n<li>\n<h3>Two Pointers Method<\/h3>\n<p>This method progresses by moving two pointers inwards from both ends. Each pointer tracks the height from the left and right, allowing calculation of positions where water can accumulate.<\/p>\n<\/li>\n<li>\n<h3>Dynamic Programming<\/h3>\n<p>This method involves finding the tallest bar from both left and right at each position, using the shorter of the two to calculate the amount of water. However, this method has the drawback of using a lot of additional memory.<\/p>\n<\/li>\n<\/ol>\n<\/section>\n<section>\n<h2>Solving the Problem with JavaScript<\/h2>\n<p>First, let&#8217;s implement the code using the two pointers method. We will create an algorithm that starts from both ends of the array and moves towards the center to calculate the amount of water.<\/p>\n<h3>Code Example<\/h3>\n<pre>\n<code>\nfunction trap(height) {\n    if (height.length === 0) return 0;\n\n    let left = 0;\n    let right = height.length - 1;\n    let leftMax = 0;\n    let rightMax = 0;\n    let waterTrapped = 0;\n\n    while (left < right) {\n        if (height[left] < height[right]) {\n            if (height[left] >= leftMax) {\n                leftMax = height[left];\n            } else {\n                waterTrapped += leftMax - height[left];\n            }\n            left++;\n        } else {\n            if (height[right] >= rightMax) {\n                rightMax = height[right];\n            } else {\n                waterTrapped += rightMax - height[right];\n            }\n            right--;\n        }\n    }\n\n    return waterTrapped;\n}\n<\/code>\n            <\/pre>\n<p>The above function takes the <code>height<\/code> array as input and calculates the amount of water that can be collected after it rains.<\/p>\n<\/section>\n<section>\n<h2>Code Explanation<\/h2>\n<p>Let&#8217;s take a step-by-step look at the above code:<\/p>\n<ol>\n<li><strong>Initialization<\/strong>: <code>left<\/code> is initialized to 0, and <code>right<\/code> is initialized to the last index of the array (length &#8211; 1). <code>leftMax<\/code> and <code>rightMax<\/code> store the maximum heights from their respective directions. <code>waterTrapped<\/code> indicates the final amount of water collected.<\/li>\n<li><strong>Loop Execution<\/strong>: The loop runs until <code>left<\/code> is less than <code>right<\/code>. In each iteration, the heights from the left and right are compared to calculate the amount of water from the lower side.<\/li>\n<li><strong>Water Calculation<\/strong>: If the height from the left is lower, it compares the maximum height on the left with the current height to calculate the amount of water that can be stored. Similarly, the same operation is performed on the right side.<\/li>\n<li><strong>Return Result<\/strong>: After all loops are completed, it returns the <code>waterTrapped<\/code> variable to output the final result.<\/li>\n<\/ol>\n<\/section>\n<section>\n<h2>Code Testing<\/h2>\n<p>Now, let&#8217;s test the algorithm we&#8217;ve written. We can verify the performance of the function through several examples like the following:<\/p>\n<pre>\n<code>\nconsole.log(trap([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1])); \/\/ 6\nconsole.log(trap([4, 2, 0, 3, 2, 5])); \/\/ 9\nconsole.log(trap([])); \/\/ 0\nconsole.log(trap([1, 0, 1])); \/\/ 1\n<\/code>\n            <\/pre>\n<p>Each output should match the predicted amount of water. The following results will be displayed:<\/p>\n<ul>\n<li><code>trap([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1])<\/code> &#8211; 6<\/li>\n<li><code>trap([4, 2, 0, 3, 2, 5])<\/code> &#8211; 9<\/li>\n<li><code>trap([])<\/code> &#8211; 0<\/li>\n<li><code>trap([1, 0, 1])<\/code> &#8211; 1<\/li>\n<\/ul>\n<\/section>\n<section>\n<h2>Performance Analysis<\/h2>\n<p>The algorithm above has a time complexity of O(n) and a space complexity of O(1). This means that the execution time and space required are proportional to the size of the input array. Therefore, it works efficiently even with large amounts of data.<\/p>\n<p>If dynamic programming is used, it requires an additional array to store heights, resulting in a space complexity of O(n). However, the time complexity remains O(n) as well.<\/p>\n<\/section>\n<section>\n<h2>Conclusion<\/h2>\n<p>In this lecture, we discussed the &#8216;Calculating the Amount of Water&#8217; problem and introduced how to solve it using JavaScript. By using the two pointers algorithm, we effectively tackled the problem and also conducted code implementation and performance analysis.<\/p>\n<p>This problem includes important concepts that can be applied to other algorithm problems, so practicing other similar problems can further enhance your algorithm skills.<\/p>\n<p>This concludes the JavaScript coding test lecture. I hope it helps you improve your coding skills!<\/p>\n<\/section>\n<\/article>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this lecture, we will address the problem of &#8216;Calculating the Amount of Water&#8217;, which is commonly featured in coding tests, using JavaScript. This problem will provide a great opportunity to learn various algorithm design patterns and utilize arrays effectively. Problem Definition The problem is to calculate the amount of water that can be collected &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34410\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;JavaScript Coding Test Course, Calculating the Amount of Water&#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-34410","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, Calculating the Amount of Water - \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\/34410\/\" \/>\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, Calculating the Amount of Water - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this lecture, we will address the problem of &#8216;Calculating the Amount of Water&#8217;, which is commonly featured in coding tests, using JavaScript. This problem will provide a great opportunity to learn various algorithm design patterns and utilize arrays effectively. Problem Definition The problem is to calculate the amount of water that can be collected &hellip; \ub354 \ubcf4\uae30 &quot;JavaScript Coding Test Course, Calculating the Amount of Water&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34410\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:27:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:41:22+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\/34410\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34410\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"JavaScript Coding Test Course, Calculating the Amount of Water\",\"datePublished\":\"2024-11-01T09:27:49+00:00\",\"dateModified\":\"2024-11-01T11:41:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34410\/\"},\"wordCount\":613,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Javascript Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34410\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34410\/\",\"name\":\"JavaScript Coding Test Course, Calculating the Amount of Water - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:27:49+00:00\",\"dateModified\":\"2024-11-01T11:41:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34410\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34410\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34410\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript Coding Test Course, Calculating the Amount of Water\"}]},{\"@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, Calculating the Amount of Water - \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\/34410\/","og_locale":"ko_KR","og_type":"article","og_title":"JavaScript Coding Test Course, Calculating the Amount of Water - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this lecture, we will address the problem of &#8216;Calculating the Amount of Water&#8217;, which is commonly featured in coding tests, using JavaScript. This problem will provide a great opportunity to learn various algorithm design patterns and utilize arrays effectively. Problem Definition The problem is to calculate the amount of water that can be collected &hellip; \ub354 \ubcf4\uae30 \"JavaScript Coding Test Course, Calculating the Amount of Water\"","og_url":"https:\/\/atmokpo.com\/w\/34410\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:27:49+00:00","article_modified_time":"2024-11-01T11:41:22+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\/34410\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34410\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"JavaScript Coding Test Course, Calculating the Amount of Water","datePublished":"2024-11-01T09:27:49+00:00","dateModified":"2024-11-01T11:41:22+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34410\/"},"wordCount":613,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Javascript Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34410\/","url":"https:\/\/atmokpo.com\/w\/34410\/","name":"JavaScript Coding Test Course, Calculating the Amount of Water - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:27:49+00:00","dateModified":"2024-11-01T11:41:22+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34410\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34410\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34410\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"JavaScript Coding Test Course, Calculating the Amount of Water"}]},{"@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\/34410","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=34410"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34410\/revisions"}],"predecessor-version":[{"id":34411,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34410\/revisions\/34411"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}