{"id":33998,"date":"2024-11-01T09:22:53","date_gmt":"2024-11-01T09:22:53","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33998"},"modified":"2024-11-01T10:54:22","modified_gmt":"2024-11-01T10:54:22","slug":"c-coding-test-course-finding-the-longest-increasing-subsequence","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33998\/","title":{"rendered":"C# Coding Test Course, Finding the Longest Increasing Subsequence"},"content":{"rendered":"<p><body><\/p>\n<h2>Problem Description<\/h2>\n<p>Let&#8217;s solve the problem of finding the length of the longest increasing subsequence in a given array. An increasing subsequence is a subarray of elements from the array that have different indices and are sorted in ascending order. For example, for the array <code>[10, 22, 9, 33, 21, 50, 41, 60, 80]<\/code>, the longest increasing subsequence is <code>[10, 22, 33, 50, 60, 80]<\/code>, which has a length of 6.<\/p>\n<h2>Problem Definition<\/h2>\n<p>Write a method that returns the length of the longest increasing subsequence in a given integer array <code>arr<\/code>.<\/p>\n<h3>Input<\/h3>\n<ul>\n<li>The first line contains the length of the array <code>n<\/code>. (1 \u2264 n \u2264 1000)<\/li>\n<li>The second line contains <code>n<\/code> integers. Each integer is <code>-10^6 \u2264 arr[i] \u2264 10^6<\/code>.<\/li>\n<\/ul>\n<h3>Output<\/h3>\n<p>Print the length of the longest increasing subsequence.<\/p>\n<h2>Example<\/h2>\n<h4>Input<\/h4>\n<pre><code>9\n10 22 9 33 21 50 41 60 80<\/code><\/pre>\n<h4>Output<\/h4>\n<pre><code>6<\/code><\/pre>\n<h2>Solution Method<\/h2>\n<p>Among the various algorithms for finding the longest increasing subsequence, the most commonly used method is Dynamic Programming. This approach breaks the problem into smaller subproblems, solving each one and using the results to solve the overall problem.<\/p>\n<h3>Step-by-Step Explanation<\/h3>\n<ol>\n<li><strong>Initialization of Array:<\/strong> Assume the length of the given array <code>arr<\/code> is <code>n<\/code>. We initialize a dynamic programming array <code>dp<\/code> to store the length of the longest increasing subsequence up to each index <code>i<\/code>. Initially, we set the value to 1 for each element, as each element can form a subsequence by itself.<\/li>\n<li><strong>Nested Loops:<\/strong> Use nested loops to compare all pairs of indices <code>i<\/code> and <code>j<\/code>. Here, <code>i<\/code> should be greater than <code>j<\/code>, and if <code>arr[i]<\/code> is greater than <code>arr[j]<\/code> (i.e., satisfying the increasing condition), we update the value of <code>dp[i]<\/code>. Specifically, we set <code>dp[i] = max(dp[i], dp[j] + 1)<\/code>. This means adding 1 to the length of the sequence that includes <code>j<\/code>.<\/li>\n<li><strong>Finding the Maximum Length:<\/strong> After calculating all sequence lengths, we find the maximum value in the <code>dp<\/code> array and return it.<\/li>\n<\/ol>\n<h2>C# Implementation<\/h2>\n<pre><code>using System;\n\nclass Program\n{\n    static void Main()\n    {\n        int n = int.Parse(Console.ReadLine());\n        int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);\n\n        int[] dp = new int[n];\n        for (int i = 0; i &lt; n; i++)\n        {\n            dp[i] = 1; \/\/ Each element can form at least 1 subsequence\n        }\n\n        for (int i = 1; i &lt; n; i++)\n        {\n            for (int j = 0; j &lt; i; j++)\n            {\n                if (arr[i] &gt; arr[j] &amp;&amp; dp[i] &lt; dp[j] + 1)\n                {\n                    dp[i] = dp[j] + 1;\n                }\n            }\n        }\n\n        int maxLength = dp[0];\n        for (int i = 1; i &lt; n; i++)\n        {\n            if (dp[i] &gt; maxLength)\n            {\n                maxLength = dp[i];\n            }\n        }\n\n        Console.WriteLine(maxLength);\n    }\n}\n<\/code><\/pre>\n<h2>Time Complexity<\/h2>\n<p>The time complexity of this algorithm is <code>O(n^2)<\/code>. This is because it uses two nested loops. Both the outer and inner loops run for each length of the array, leading to a total of <code>n * n<\/code> operations in the worst case. The space complexity is <code>O(n)<\/code>, which is the space needed to store the <code>dp<\/code> array.<\/p>\n<h2>Conclusion<\/h2>\n<p>In this tutorial, we implemented an algorithm to find the longest increasing subsequence in C#. This problem is frequently encountered in coding tests and is very useful for learning and mastering the basics of dynamic programming. Through consistent practice, one can develop the thinking and approaches needed to solve a variety of problems.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem Description Let&#8217;s solve the problem of finding the length of the longest increasing subsequence in a given array. An increasing subsequence is a subarray of elements from the array that have different indices and are sorted in ascending order. For example, for the array [10, 22, 9, 33, 21, 50, 41, 60, 80], the &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33998\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;C# Coding Test Course, Finding the Longest Increasing Subsequence&#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-33998","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, Finding the Longest Increasing Subsequence - \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\/33998\/\" \/>\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, Finding the Longest Increasing Subsequence - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Problem Description Let&#8217;s solve the problem of finding the length of the longest increasing subsequence in a given array. An increasing subsequence is a subarray of elements from the array that have different indices and are sorted in ascending order. For example, for the array [10, 22, 9, 33, 21, 50, 41, 60, 80], the &hellip; \ub354 \ubcf4\uae30 &quot;C# Coding Test Course, Finding the Longest Increasing Subsequence&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33998\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:22:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T10:54: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\/33998\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33998\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"C# Coding Test Course, Finding the Longest Increasing Subsequence\",\"datePublished\":\"2024-11-01T09:22:53+00:00\",\"dateModified\":\"2024-11-01T10:54:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33998\/\"},\"wordCount\":381,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"C# Coding Test Tutorials\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33998\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33998\/\",\"name\":\"C# Coding Test Course, Finding the Longest Increasing Subsequence - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:22:53+00:00\",\"dateModified\":\"2024-11-01T10:54:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33998\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33998\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33998\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# Coding Test Course, Finding the Longest Increasing Subsequence\"}]},{\"@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, Finding the Longest Increasing Subsequence - \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\/33998\/","og_locale":"ko_KR","og_type":"article","og_title":"C# Coding Test Course, Finding the Longest Increasing Subsequence - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Problem Description Let&#8217;s solve the problem of finding the length of the longest increasing subsequence in a given array. An increasing subsequence is a subarray of elements from the array that have different indices and are sorted in ascending order. For example, for the array [10, 22, 9, 33, 21, 50, 41, 60, 80], the &hellip; \ub354 \ubcf4\uae30 \"C# Coding Test Course, Finding the Longest Increasing Subsequence\"","og_url":"https:\/\/atmokpo.com\/w\/33998\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:22:53+00:00","article_modified_time":"2024-11-01T10:54: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\/33998\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33998\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"C# Coding Test Course, Finding the Longest Increasing Subsequence","datePublished":"2024-11-01T09:22:53+00:00","dateModified":"2024-11-01T10:54:22+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33998\/"},"wordCount":381,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["C# Coding Test Tutorials"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33998\/","url":"https:\/\/atmokpo.com\/w\/33998\/","name":"C# Coding Test Course, Finding the Longest Increasing Subsequence - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:22:53+00:00","dateModified":"2024-11-01T10:54:22+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33998\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33998\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33998\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"C# Coding Test Course, Finding the Longest Increasing Subsequence"}]},{"@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\/33998","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=33998"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33998\/revisions"}],"predecessor-version":[{"id":33999,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33998\/revisions\/33999"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}