{"id":34114,"date":"2024-11-01T09:24:18","date_gmt":"2024-11-01T09:24:18","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34114"},"modified":"2024-11-01T10:58:33","modified_gmt":"2024-11-01T10:58:33","slug":"c-coding-test-course-dna-password-2","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34114\/","title":{"rendered":"C++ Coding Test Course, DNA Password"},"content":{"rendered":"<p><body><\/p>\n<h2>1. Problem Definition<\/h2>\n<p>Recently, a biologist found themselves in a situation where they needed to create a specific password using DNA sequences. This DNA sequence consists of four types of nucleotides: A, C, G, and T. The password is generated from a combination of A, C, G, and T selected from the given DNA sequence.<\/p>\n<h3>Problem Description<\/h3>\n<p>Write a program to find the substring of length K among all substrings of the given string S where the frequency of each nucleotide is minimized, and determine the number of valid passwords among them. If all frequencies are the same, select the smallest lexicographic string among those with the minimum frequency. The length of the substring must be less than or equal to the given string.<\/p>\n<h3>Input<\/h3>\n<ul>\n<li>The first line contains the length N of the DNA string S (1 \u2264 N \u2264 100,000).<\/li>\n<li>The second line contains the integer K (1 \u2264 K \u2264 N).<\/li>\n<li>The third line contains the string S.<\/li>\n<\/ul>\n<h3>Output<\/h3>\n<p>Print the number of valid passwords and the smallest lexicographic password among them.<\/p>\n<h2>2. Algorithm Analysis<\/h2>\n<p>To solve this problem, we will use the Sliding Window technique. This method allows us to move through substrings of a specific length K while counting the frequency of each character (A, C, G, T) to solve the problem.<\/p>\n<h3>Procedure<\/h3>\n<ol>\n<li>Select the first substring of length K and count the frequency of characters.<\/li>\n<li>Then, adjust the frequency as the sliding window moves, adding the new character and removing the old one.<\/li>\n<li>Check the frequency of nucleotides in each K-length substring and find the smallest frequency.<\/li>\n<li>After inspecting all substrings, print the count of valid passwords and the smallest lexicographic password.<\/li>\n<\/ol>\n<h2>3. C++ Coding Example<\/h2>\n<p>Below is a C++ code example to solve this problem:<\/p>\n<pre>\n        #include &lt;iostream&gt;\n        #include &lt;string&gt;\n        #include &lt;unordered_map&gt;\n        #include &lt;vector&gt;\n        #include &lt;algorithm&gt;\n\n        using namespace std;\n\n        int main() {\n            int N, K;\n            string S;\n            cin &gt;&gt; N &gt;&gt; K;\n            cin &gt;&gt; S;\n\n            unordered_map<char, int=\"\"> freq;\n            for (int i = 0; i &lt; K; i++) {\n                freq[S[i]]++;\n            }\n\n            \/\/ Initial result setup\n            int min_freq = INT_MAX;\n            vector<string> passwords;\n\n            \/\/ Sliding window to check all K-length substrings\n            for (int i = 0; i &lt;= N - K; i++) {\n                if (i &gt; 0) {\n                    freq[S[i - 1]]--;\n                    freq[S[i + K - 1]]++;\n                }\n\n                \/\/ Finding the smallest frequency\n                int cur_min = INT_MAX;\n                for (const auto &amp;entry : freq) {\n                    cur_min = min(cur_min, entry.second);\n                }\n\n                \/\/ Adding valid password\n                if (cur_min &lt;= (K \/ 4)) { \/\/ Frequency of all nucleotides is less than or equal to K\/4\n                    passwords.push_back(S.substr(i, K));\n                }\n            }\n\n            \/\/ Finding the smallest lexicographic password\n            sort(passwords.begin(), passwords.end());\n            string smallest_password = (passwords.empty() ? \"\" : passwords[0]);\n            \n            \/\/ Output result\n            cout &lt;&lt; passwords.size() &lt;&lt; \" \" &lt;&lt; smallest_password &lt;&lt; endl;\n\n            return 0;\n        }\n    <\/string><\/char,><\/pre>\n<h2>4. Code Explanation<\/h2>\n<p>The above code works as follows:<\/p>\n<ul>\n<li>First, the DNA string and its length, along with the length K of the substring, are input.<\/li>\n<li>An <code>unordered_map<\/code> is used to count the frequency of the first K characters.<\/li>\n<li>The Sliding Window technique is used to move through each K-length substring, modifying the frequency.<\/li>\n<li>The minimum frequency is calculated for each substring, adding to the valid password list only when conditions are met.<\/li>\n<li>Finally, the valid password list is sorted to find the smallest lexicographic password.<\/li>\n<\/ul>\n<h2>5. Test Cases<\/h2>\n<p>Now, let&#8217;s look at some test cases to solve this problem:<\/p>\n<h3>Test Case 1<\/h3>\n<pre>\n        Input:\n        8 4\n        ACGTTGCA\n\n        Output:\n        1 ACGT\n    <\/pre>\n<h3>Test Case 2<\/h3>\n<pre>\n        Input:\n        12 5\n        ACGTTACGATC\n\n        Output:\n        3 ACCTA ACTAC TCGAT\n    <\/pre>\n<h3>Test Case 3<\/h3>\n<pre>\n        Input:\n        6 3\n        ACGTAC\n\n        Output:\n        2 ACG ACT\n    <\/pre>\n<h2>6. Conclusion<\/h2>\n<p>In this tutorial, we learned an algorithm utilizing the sliding window technique through the DNA password problem. This technique can be very useful in solving string-related problems and can be applied to various modified problems. It serves as a solid foundation that can be beneficial in coding tests.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Problem Definition Recently, a biologist found themselves in a situation where they needed to create a specific password using DNA sequences. This DNA sequence consists of four types of nucleotides: A, C, G, and T. The password is generated from a combination of A, C, G, and T selected from the given DNA sequence. &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34114\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;C++ Coding Test Course, DNA Password&#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-34114","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, DNA Password - \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\/34114\/\" \/>\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, DNA Password - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"1. Problem Definition Recently, a biologist found themselves in a situation where they needed to create a specific password using DNA sequences. This DNA sequence consists of four types of nucleotides: A, C, G, and T. The password is generated from a combination of A, C, G, and T selected from the given DNA sequence. &hellip; \ub354 \ubcf4\uae30 &quot;C++ Coding Test Course, DNA Password&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34114\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:24:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T10:58:33+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\/34114\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34114\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"C++ Coding Test Course, DNA Password\",\"datePublished\":\"2024-11-01T09:24:18+00:00\",\"dateModified\":\"2024-11-01T10:58:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34114\/\"},\"wordCount\":441,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"C++ Coding Test Tutorials\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34114\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34114\/\",\"name\":\"C++ Coding Test Course, DNA Password - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:24:18+00:00\",\"dateModified\":\"2024-11-01T10:58:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34114\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34114\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34114\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C++ Coding Test Course, DNA Password\"}]},{\"@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, DNA Password - \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\/34114\/","og_locale":"ko_KR","og_type":"article","og_title":"C++ Coding Test Course, DNA Password - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"1. Problem Definition Recently, a biologist found themselves in a situation where they needed to create a specific password using DNA sequences. This DNA sequence consists of four types of nucleotides: A, C, G, and T. The password is generated from a combination of A, C, G, and T selected from the given DNA sequence. &hellip; \ub354 \ubcf4\uae30 \"C++ Coding Test Course, DNA Password\"","og_url":"https:\/\/atmokpo.com\/w\/34114\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:24:18+00:00","article_modified_time":"2024-11-01T10:58:33+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\/34114\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34114\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"C++ Coding Test Course, DNA Password","datePublished":"2024-11-01T09:24:18+00:00","dateModified":"2024-11-01T10:58:33+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34114\/"},"wordCount":441,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["C++ Coding Test Tutorials"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34114\/","url":"https:\/\/atmokpo.com\/w\/34114\/","name":"C++ Coding Test Course, DNA Password - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:24:18+00:00","dateModified":"2024-11-01T10:58:33+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34114\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34114\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34114\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"C++ Coding Test Course, DNA Password"}]},{"@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\/34114","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=34114"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34114\/revisions"}],"predecessor-version":[{"id":34115,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34114\/revisions\/34115"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}