{"id":34058,"date":"2024-11-01T09:23:39","date_gmt":"2024-11-01T09:23:39","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34058"},"modified":"2024-11-01T10:53:49","modified_gmt":"2024-11-01T10:53:49","slug":"c-coding-test-course-exploring-dynamic-programming","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34058\/","title":{"rendered":"C# Coding Test Course, Exploring Dynamic Programming"},"content":{"rendered":"<p>One of the effective methods for solving algorithm problems in coding tests is Dynamic Programming (DP). Dynamic programming is an approach that solves complex problems by breaking them down into simpler subproblems, making it very useful for solving optimization problems and reducing computations. In this course, we will start with the basics of dynamic programming and then explore the theory with practical problems, explaining how to solve them step by step using the C# programming language.<\/p>\n<h2>Understanding Dynamic Programming<\/h2>\n<p>Dynamic programming fundamentally utilizes two important properties: <strong>optimal substructure<\/strong> and <strong>overlapping subproblems<\/strong>. Optimal substructure means that the optimal solution to a problem is composed of optimal solutions to its subproblems. Overlapping subproblems mean that instead of solving the same subproblem multiple times, we store the results and reuse them when needed. This dramatically increases efficiency.<\/p>\n<h3>Examples of Dynamic Programming Applications<\/h3>\n<p>Dynamic programming is used for problems such as:<\/p>\n<ul>\n<li>Calculating Fibonacci sequences<\/li>\n<li>Longest Common Subsequence<\/li>\n<li>Minimum Path Problem<\/li>\n<li>0-1 Knapsack Problem<\/li>\n<li>Dynamic Matrix Multiplication<\/li>\n<\/ul>\n<h2>Problem Introduction: 0-1 Knapsack Problem<\/h2>\n<p>In this course, we will apply dynamic programming through the <strong>0-1 Knapsack Problem<\/strong>. The problem is described as follows:<\/p>\n<blockquote>\n<p>There is a knapsack with a weight limit. Each item has a unique weight and value. Each item can be used either 0 or 1 times, and you need to calculate the maximum value that can be packed in the knapsack.<\/p>\n<\/blockquote>\n<p>For example, let&#8217;s assume we have the following list of items:<\/p>\n<table>\n<thead>\n<tr>\n<th>Item<\/th>\n<th>Weight<\/th>\n<th>Value<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Item 1<\/td>\n<td>1<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>Item 2<\/td>\n<td>2<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>Item 3<\/td>\n<td>3<\/td>\n<td>10<\/td>\n<\/tr>\n<tr>\n<td>Item 4<\/td>\n<td>5<\/td>\n<td>16<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The maximum weight of the knapsack is <strong>7<\/strong>. What would be the maximum value in this case?<\/p>\n<h2>Problem Solving Process<\/h2>\n<h3>Step 1: Problem Definition<\/h3>\n<p>We might try to solve the problem with a recursive mindset, but this may lead to redundant computations. Therefore, we approach by using dynamic programming to store and reuse solutions of subproblems.<\/p>\n<h3>Step 2: State Definition<\/h3>\n<p>First, we define the problem we need to solve. We use <strong>dp[i][w]<\/strong> to store the maximum value while considering the first i items without exceeding weight w. Here, i is the index of the item and w is the weight of the knapsack.<\/p>\n<h3>Step 3: State Transition Equation<\/h3>\n<p>Now we need to define the state transition equation. We consider two cases: including and not including the i-th item.<\/p>\n<ul>\n<li>If the item i is not included: <strong>dp[i][w] = dp[i-1][w]<\/strong><\/li>\n<li>If the item i is included (and the item&#8217;s weight must not exceed w): <strong>dp[i][w] = dp[i-1][w &#8211; weight[i]] + value[i]<\/strong><\/li>\n<\/ul>\n<p>Finally, we choose the maximum value from the two cases:<\/p>\n<pre>\ndp[i][w] = max(dp[i-1][w], dp[i-1][w - weight[i]] + value[i])\n<\/pre>\n<h3>Step 4: Defining Initial Conditions<\/h3>\n<p>Basically, when there are no items or the weight is 0, the maximum value is 0. Therefore, we initialize as follows:<\/p>\n<pre>\nfor w in range(max_weight + 1):\n    dp[0][w] = 0\nfor i in range(n + 1):\n    dp[i][0] = 0\n<\/pre>\n<h3>Step 5: Final Solution<\/h3>\n<p>After solving all subproblems, the last element of the dp array represents the optimal solution. We output this to check the result.<\/p>\n<h3>Step 6: C# Code Implementation<\/h3>\n<pre><code class=\"language-csharp\">\nusing System;\n\nclass Program\n{\n    static void Main(string[] args)\n    {\n        int[] weights = new int[] { 1, 2, 3, 5 };\n        int[] values = new int[] { 1, 6, 10, 16 };\n        int maxWeight = 7;\n        int n = weights.Length;\n\n        int[,] dp = new int[n + 1, maxWeight + 1];\n\n        \/\/ Initialization\n        for (int w = 0; w &lt;= maxWeight; w++)\n            dp[0, w] = 0;\n        \n        for (int i = 0; i &lt;= n; i++)\n            dp[i, 0] = 0;\n\n        \/\/ Applying Dynamic Programming\n        for (int i = 1; i &lt;= n; i++)\n        {\n            for (int w = 1; w &lt;= maxWeight; w++)\n            {\n                if (weights[i - 1] &lt;= w)\n                    dp[i, w] = Math.Max(dp[i - 1, w], dp[i - 1, w - weights[i - 1]] + values[i - 1]);\n                else\n                    dp[i, w] = dp[i - 1, w];\n            }\n        }\n\n        Console.WriteLine(\"Maximum Value: \" + dp[n, maxWeight]);\n    }\n}\n<\/code><\/pre>\n<h2>Result Verification<\/h2>\n<p>Running the above code will print the maximum value for the given knapsack problem. In this case, the result will be <strong>17<\/strong>. This means we can choose Item 2 and Item 3 to achieve the maximum value without exceeding the maximum weight.<\/p>\n<h2>Conclusion<\/h2>\n<p>Through this course, we explored the basics of dynamic programming and the process of solving the 0-1 Knapsack Problem. Dynamic programming can be applied to many algorithm problems and will greatly assist in enhancing problem-solving skills. Practice solving various problems to build a deeper understanding.<\/p>\n<p>In the next course, we will cover more diverse applications of dynamic programming. Thank you!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the effective methods for solving algorithm problems in coding tests is Dynamic Programming (DP). Dynamic programming is an approach that solves complex problems by breaking them down into simpler subproblems, making it very useful for solving optimization problems and reducing computations. In this course, we will start with the basics of dynamic programming &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34058\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;C# Coding Test Course, Exploring Dynamic Programming&#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-34058","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, Exploring Dynamic Programming - \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\/34058\/\" \/>\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, Exploring Dynamic Programming - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"One of the effective methods for solving algorithm problems in coding tests is Dynamic Programming (DP). Dynamic programming is an approach that solves complex problems by breaking them down into simpler subproblems, making it very useful for solving optimization problems and reducing computations. In this course, we will start with the basics of dynamic programming &hellip; \ub354 \ubcf4\uae30 &quot;C# Coding Test Course, Exploring Dynamic Programming&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34058\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:23:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T10:53:49+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\/34058\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34058\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"C# Coding Test Course, Exploring Dynamic Programming\",\"datePublished\":\"2024-11-01T09:23:39+00:00\",\"dateModified\":\"2024-11-01T10:53:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34058\/\"},\"wordCount\":580,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"C# Coding Test Tutorials\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34058\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34058\/\",\"name\":\"C# Coding Test Course, Exploring Dynamic Programming - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:23:39+00:00\",\"dateModified\":\"2024-11-01T10:53:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34058\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34058\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34058\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# Coding Test Course, Exploring Dynamic Programming\"}]},{\"@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, Exploring Dynamic Programming - \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\/34058\/","og_locale":"ko_KR","og_type":"article","og_title":"C# Coding Test Course, Exploring Dynamic Programming - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"One of the effective methods for solving algorithm problems in coding tests is Dynamic Programming (DP). Dynamic programming is an approach that solves complex problems by breaking them down into simpler subproblems, making it very useful for solving optimization problems and reducing computations. In this course, we will start with the basics of dynamic programming &hellip; \ub354 \ubcf4\uae30 \"C# Coding Test Course, Exploring Dynamic Programming\"","og_url":"https:\/\/atmokpo.com\/w\/34058\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:23:39+00:00","article_modified_time":"2024-11-01T10:53:49+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\/34058\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34058\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"C# Coding Test Course, Exploring Dynamic Programming","datePublished":"2024-11-01T09:23:39+00:00","dateModified":"2024-11-01T10:53:49+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34058\/"},"wordCount":580,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["C# Coding Test Tutorials"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34058\/","url":"https:\/\/atmokpo.com\/w\/34058\/","name":"C# Coding Test Course, Exploring Dynamic Programming - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:23:39+00:00","dateModified":"2024-11-01T10:53:49+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34058\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34058\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34058\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"C# Coding Test Course, Exploring Dynamic Programming"}]},{"@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\/34058","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=34058"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34058\/revisions"}],"predecessor-version":[{"id":34059,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34058\/revisions\/34059"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}