{"id":34332,"date":"2024-11-01T09:26:56","date_gmt":"2024-11-01T09:26:56","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34332"},"modified":"2024-11-01T10:57:40","modified_gmt":"2024-11-01T10:57:40","slug":"c-coding-test-course-finding-the-longest-common-subsequence-2","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34332\/","title":{"rendered":"C++ Coding Test Course, Finding the Longest Common Subsequence"},"content":{"rendered":"<p><body><\/p>\n<p>\n    Preparing for coding tests can be somewhat challenging, but systematically mastering algorithm problems can lead to good results.<br \/>\n    In this course, we will cover the Longest Common Subsequence (LCS) problem.<br \/>\n    This problem is an important algorithmic question that measures how much two subsequences overlap in strings or sequences.\n<\/p>\n<h2>Problem Definition<\/h2>\n<p>\n    Given two strings, the problem is to find the length of the longest common subsequence of these two strings.<br \/>\n    The two strings are as follows:\n<\/p>\n<ul>\n<li><strong>String A<\/strong>: &#8220;ABCBDAB&#8221;<\/li>\n<li><strong>String B<\/strong>: &#8220;BDCAB&#8221;<\/li>\n<\/ul>\n<p>\n    In this case, the longest common subsequence of strings A and B is &#8220;BDAB&#8221; or &#8220;BCAB&#8221;, and their length is 4.<br \/>\n    To solve this problem, we will use a Dynamic Programming technique.\n<\/p>\n<h2>Problem Solving Strategy<\/h2>\n<p>\n    The Longest Common Subsequence (LCS) problem can be solved using both recursive problem-solving approaches and dynamic programming.<br \/>\n    The recursive approach is simple but has a very high time complexity, making it impractical. Therefore, we will use dynamic programming.\n<\/p>\n<h3>1. Understanding Dynamic Programming<\/h3>\n<p>\n    Dynamic Programming (DP) is a method that divides problems into smaller subproblems and solves each subproblem just once, storing the results (caching).<br \/>\n    We use a 2D dynamic array to solve the LCS problem. Each cell in the array stores the LCS length of the substring.\n<\/p>\n<h3>2. Constructing the DP Table<\/h3>\n<p>\n    Let the lengths of strings A and B be m and n, respectively.<br \/>\n    The DP table (longestCommonSubsequence array) is constructed with a size of (m + 1) x (n + 1).<br \/>\n    Here, DP[i][j] represents the LCS length up to the first i characters of string A and the first j characters of string B.\n<\/p>\n<h3>3. Setting the Recurrence Relation<\/h3>\n<p>\n    To fill the DP table, we use the following recurrence relations:<\/p>\n<ul>\n<li>If A[i-1] == B[j-1], then <code>DP[i][j] = DP[i-1][j-1] + 1<\/code><\/li>\n<li>Otherwise, <code>DP[i][j] = max(DP[i-1][j], DP[i][j-1])<\/code><\/li>\n<\/ul>\n<p>\n    This allows us to calculate the LCS of the two strings.\n<\/p>\n<h2>C++ Implementation<\/h2>\n<p>\n    Now let&#8217;s implement the above theory in C++ code.\n<\/p>\n<pre><code>\n#include &lt;iostream&gt;\n#include &lt;vector&gt;\n#include &lt;string&gt;\n\nusing namespace std;\n\nint calculateLCS(const string &amp;A, const string &amp;B) {\n    int m = A.length();\n    int n = B.length();\n\n    \/\/ Initialize the DP table\n    vector&lt;vector&lt;int&gt;&gt; DP(m + 1, vector&lt;int&gt;(n + 1, 0));\n\n    \/\/ Fill the DP table\n    for (int i = 1; i &lt;= m; i++) {\n        for (int j = 1; j &lt;= n; j++) {\n            if (A[i - 1] == B[j - 1]) {\n                DP[i][j] = DP[i - 1][j - 1] + 1;\n            } else {\n                DP[i][j] = max(DP[i - 1][j], DP[i][j - 1]);\n            }\n        }\n    }\n\n    return DP[m][n];\n}\n\nint main() {\n    string A = \"ABCBDAB\";\n    string B = \"BDCAB\";\n\n    int length = calculateLCS(A, B);\n    cout &lt;&lt; \"The length of the longest common subsequence is \" &lt;&lt; length &lt;&lt; \".\" &lt;&lt; endl;\n\n    return 0;\n}\n<\/code><\/pre>\n<h2>Code Explanation<\/h2>\n<p>\n    In the above C++ code, the <code>calculateLCS<\/code> function is used to compute the LCS of the two strings.<br \/>\n    First, the DP table is initialized, and then comparisons are made for each pair of characters while filling the DP table.<br \/>\n    Finally, the length of the longest common subsequence is stored in the bottom right cell of the DP table (DP[m][n]).\n<\/p>\n<h2>Time Complexity<\/h2>\n<p>\n    The time complexity of this algorithm is O(m * n), and the space complexity is also O(m * n).<br \/>\n    This is proportional to the lengths of the two strings, so if the input string lengths are long, it may affect performance.\n<\/p>\n<h2>Conclusion<\/h2>\n<p>\n    In this lecture, we covered the problem of finding the longest common subsequence between two strings.<br \/>\n    We learned how to solve the problem using C++ and dynamic programming, and the longest common subsequence problem is one of the frequently encountered problems in coding tests.<br \/>\n    If you practice and learn similar algorithms through various problems, you should be able to achieve good results in coding tests.\n<\/p>\n<p>Thank you!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Preparing for coding tests can be somewhat challenging, but systematically mastering algorithm problems can lead to good results. In this course, we will cover the Longest Common Subsequence (LCS) problem. This problem is an important algorithmic question that measures how much two subsequences overlap in strings or sequences. Problem Definition Given two strings, the problem &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34332\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;C++ Coding Test Course, Finding the Longest Common 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":[111],"tags":[],"class_list":["post-34332","post","type-post","status-publish","format-standard","hentry","category-c-coding-test-tutorials-2"],"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 Common 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\/34332\/\" \/>\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 Common Subsequence - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Preparing for coding tests can be somewhat challenging, but systematically mastering algorithm problems can lead to good results. In this course, we will cover the Longest Common Subsequence (LCS) problem. This problem is an important algorithmic question that measures how much two subsequences overlap in strings or sequences. Problem Definition Given two strings, the problem &hellip; \ub354 \ubcf4\uae30 &quot;C++ Coding Test Course, Finding the Longest Common Subsequence&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34332\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:26:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T10:57:40+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\/34332\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34332\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"C++ Coding Test Course, Finding the Longest Common Subsequence\",\"datePublished\":\"2024-11-01T09:26:56+00:00\",\"dateModified\":\"2024-11-01T10:57:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34332\/\"},\"wordCount\":484,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"C++ Coding Test Tutorials\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34332\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34332\/\",\"name\":\"C++ Coding Test Course, Finding the Longest Common Subsequence - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:26:56+00:00\",\"dateModified\":\"2024-11-01T10:57:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34332\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34332\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34332\/#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 Common 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 Common 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\/34332\/","og_locale":"ko_KR","og_type":"article","og_title":"C++ Coding Test Course, Finding the Longest Common Subsequence - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Preparing for coding tests can be somewhat challenging, but systematically mastering algorithm problems can lead to good results. In this course, we will cover the Longest Common Subsequence (LCS) problem. This problem is an important algorithmic question that measures how much two subsequences overlap in strings or sequences. Problem Definition Given two strings, the problem &hellip; \ub354 \ubcf4\uae30 \"C++ Coding Test Course, Finding the Longest Common Subsequence\"","og_url":"https:\/\/atmokpo.com\/w\/34332\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:26:56+00:00","article_modified_time":"2024-11-01T10:57:40+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\/34332\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34332\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"C++ Coding Test Course, Finding the Longest Common Subsequence","datePublished":"2024-11-01T09:26:56+00:00","dateModified":"2024-11-01T10:57:40+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34332\/"},"wordCount":484,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["C++ Coding Test Tutorials"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34332\/","url":"https:\/\/atmokpo.com\/w\/34332\/","name":"C++ Coding Test Course, Finding the Longest Common Subsequence - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:26:56+00:00","dateModified":"2024-11-01T10:57:40+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34332\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34332\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34332\/#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 Common 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\/34332","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=34332"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34332\/revisions"}],"predecessor-version":[{"id":34333,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34332\/revisions\/34333"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34332"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34332"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34332"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}