{"id":34998,"date":"2024-11-01T09:34:27","date_gmt":"2024-11-01T09:34:27","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34998"},"modified":"2024-11-01T12:52:16","modified_gmt":"2024-11-01T12:52:16","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%ac%bc%ec%9d%98-%ec%96%91-%ea%b5%ac%ed%95%98%ea%b8%b0-2","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34998\/","title":{"rendered":"Kotlin coding test course, calculating the amount of water"},"content":{"rendered":"<p><body><\/p>\n<p>In this course, we will address an algorithm problem that calculates the amount of water based on certain conditions using Kotlin. By tackling this problem, which is frequently featured in coding tests, you can develop algorithmic thinking and strengthen the fundamentals of Kotlin programming. This course will provide detailed explanations, including problem description, approach, code implementation, algorithm analysis, and optimization techniques.<\/p>\n<h2>Problem Description<\/h2>\n<p>You have an object with a flat bottom. The height information of this object can be represented as an array, where each index indicates the height at that position. After it rains on the object, write a program to calculate the amount of water that accumulates at each position.<\/p>\n<h3>Input<\/h3>\n<ul>\n<li>Integer N (1 \u2264 N \u2264 1000): Size of the height array<\/li>\n<li>Integer array heights (0 \u2264 heights[i] \u2264 10<sup>6<\/sup>): Height information at each position<\/li>\n<\/ul>\n<h3>Output<\/h3>\n<ul>\n<li>Print the total amount of water accumulated on the object<\/li>\n<\/ul>\n<h3>Example<\/h3>\n<pre><code>Input:\n5\n0 1 0 2 1 0 1 3 2 1 2 1\n\nOutput:\n6<\/code><\/pre>\n<p>In the above case, the object with a height of 1 at position 2 and an object with a height of 2 at position 3 trap water, resulting in a total of 6 units of water.<\/p>\n<h2>Approach<\/h2>\n<p>To solve this problem, you can use the following methodology:<\/p>\n<ul>\n<li>Understand the structure where water collects in the lowest base.<\/li>\n<li>Use two arrays to calculate the maximum height from the left and right, making it easy to compute the amount of water that can accumulate at each position.<\/li>\n<\/ul>\n<h3>Step 1: Create Maximum Height Arrays<\/h3>\n<p>First, create arrays to store the maximum height from both the left and the right for each position.<\/p>\n<h3>Step 2: Calculate Water Amount<\/h3>\n<p>Write a loop that iterates through each index to calculate the amount of water that can accumulate at that index.<\/p>\n<h2>Code Implementation<\/h2>\n<p>Now, let&#8217;s implement the code based on this approach.<\/p>\n<pre><code>fun calculateWaterVolume(heights: IntArray): Int {\n    val n = heights.size\n    if (n == 0) return 0\n\n    \/\/ Left and right maximum height arrays\n    val leftMax = IntArray(n)\n    val rightMax = IntArray(n)\n\n    \/\/ Calculate maximum height from left to right\n    leftMax[0] = heights[0]\n    for (i in 1 until n) {\n        leftMax[i] = maxOf(leftMax[i - 1], heights[i])\n    }\n\n    \/\/ Calculate maximum height from right to left\n    rightMax[n - 1] = heights[n - 1]\n    for (i in n - 2 downTo 0) {\n        rightMax[i] = maxOf(rightMax[i + 1], heights[i])\n    }\n\n    \/\/ Calculate the amount of water\n    var totalWater = 0\n    for (i in 0 until n) {\n        totalWater += minOf(leftMax[i], rightMax[i]) - heights[i]\n    }\n\n    return totalWater\n}\n\n\/\/ Main function\nfun main() {\n    val heights = intArrayOf(0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1)\n    val result = calculateWaterVolume(heights)\n    println(\"Total amount of water: $result\")\n}<\/code><\/pre>\n<h2>Algorithm Analysis<\/h2>\n<p>The time complexity of this algorithm is O(N), where N is the length of the height array. We achieve this complexity by iterating through each index twice. Additionally, it requires O(N) space complexity as well, sufficient for the arrays used to store the maximum heights at each index.<\/p>\n<h2>Optimization Techniques<\/h2>\n<p>The above code can be further optimized to save space. By using pointers to directly calculate the maximum height at each index without using two arrays, the space complexity can be reduced to O(1).<\/p>\n<pre><code>fun calculateWaterVolumeOptimized(heights: IntArray): Int {\n    val n = heights.size\n    if (n == 0) return 0\n\n    var left = 0\n    var right = n - 1\n    var leftMax = 0\n    var rightMax = 0\n    var totalWater = 0\n\n    while (left < right) {\n        if (heights[left] < heights[right]) {\n            if (heights[left] >= leftMax) {\n                leftMax = heights[left]\n            } else {\n                totalWater += leftMax - heights[left]\n            }\n            left++\n        } else {\n            if (heights[right] >= rightMax) {\n                rightMax = heights[right]\n            } else {\n                totalWater += rightMax - heights[right]\n            }\n            right--\n        }\n    }\n\n    return totalWater\n}<\/code><\/pre>\n<h2>Conclusion<\/h2>\n<p>In this course, we have tackled an algorithm problem for calculating the amount of water. This type of problem frequently appears in coding tests and is very helpful in building algorithmic thinking and foundational Kotlin programming skills. We also explored optimization techniques to minimize space complexity. I hope you learned a lot from this course.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this course, we will address an algorithm problem that calculates the amount of water based on certain conditions using Kotlin. By tackling this problem, which is frequently featured in coding tests, you can develop algorithmic thinking and strengthen the fundamentals of Kotlin programming. This course will provide detailed explanations, including problem description, approach, code &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34998\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Kotlin 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":[106],"tags":[],"class_list":["post-34998","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, 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\/34998\/\" \/>\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, calculating the amount of water - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this course, we will address an algorithm problem that calculates the amount of water based on certain conditions using Kotlin. By tackling this problem, which is frequently featured in coding tests, you can develop algorithmic thinking and strengthen the fundamentals of Kotlin programming. This course will provide detailed explanations, including problem description, approach, code &hellip; \ub354 \ubcf4\uae30 &quot;Kotlin coding test course, calculating the amount of water&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34998\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:34:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T12:52:16+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\/34998\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34998\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Kotlin coding test course, calculating the amount of water\",\"datePublished\":\"2024-11-01T09:34:27+00:00\",\"dateModified\":\"2024-11-01T12:52:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34998\/\"},\"wordCount\":435,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Kotlin coding test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34998\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34998\/\",\"name\":\"Kotlin 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:34:27+00:00\",\"dateModified\":\"2024-11-01T12:52:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34998\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34998\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34998\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kotlin 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":"Kotlin 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\/34998\/","og_locale":"ko_KR","og_type":"article","og_title":"Kotlin coding test course, calculating the amount of water - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this course, we will address an algorithm problem that calculates the amount of water based on certain conditions using Kotlin. By tackling this problem, which is frequently featured in coding tests, you can develop algorithmic thinking and strengthen the fundamentals of Kotlin programming. This course will provide detailed explanations, including problem description, approach, code &hellip; \ub354 \ubcf4\uae30 \"Kotlin coding test course, calculating the amount of water\"","og_url":"https:\/\/atmokpo.com\/w\/34998\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:34:27+00:00","article_modified_time":"2024-11-01T12:52:16+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\/34998\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34998\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Kotlin coding test course, calculating the amount of water","datePublished":"2024-11-01T09:34:27+00:00","dateModified":"2024-11-01T12:52:16+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34998\/"},"wordCount":435,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Kotlin coding test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34998\/","url":"https:\/\/atmokpo.com\/w\/34998\/","name":"Kotlin 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:34:27+00:00","dateModified":"2024-11-01T12:52:16+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34998\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34998\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34998\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Kotlin 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\/34998","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=34998"}],"version-history":[{"count":2,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34998\/revisions"}],"predecessor-version":[{"id":38109,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34998\/revisions\/38109"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}