{"id":33566,"date":"2024-11-01T09:17:55","date_gmt":"2024-11-01T09:17:55","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33566"},"modified":"2024-11-01T11:47:36","modified_gmt":"2024-11-01T11:47:36","slug":"python-coding-test-course-dna-password","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33566\/","title":{"rendered":"Python Coding Test Course, DNA Password"},"content":{"rendered":"<p><body><\/p>\n<p>Many people are solving algorithm problems to prepare for coding tests. In this course, we will explore the DNA password problem and explain step by step how to solve it.<\/p>\n<h2>Problem Description<\/h2>\n<p>The DNA password consists of a specific pattern of combinations. The problem is to find how many substrings from the given DNA string can become passwords. Here are the details of the problem.<\/p>\n<h3>Problem Definition<\/h3>\n<blockquote class=\"highlight\"><p>\n        From the given DNA string, count the number of distinct substrings that contain only the characters &#8220;&#8221;&#8221;ACGT&#8221;&#8221;&#8221; and are of length K or more.\n    <\/p><\/blockquote>\n<h3>Input<\/h3>\n<ul>\n<li>The first line contains the DNA string. (1 \u2264 string length \u2264 1000)<\/li>\n<li>The second line contains the value of K. (1 \u2264 K \u2264 100)<\/li>\n<\/ul>\n<h3>Output<\/h3>\n<p>Output the total number of distinct substrings.<\/p>\n<h2>Problem Solving Process<\/h2>\n<p>To solve this problem efficiently, we will follow these steps:<\/p>\n<h3>Step 1: Generate Substrings<\/h3>\n<p>Generate all substrings of length K or more from the given DNA string. To do this, we will iterate over the starting indexes of the string and extract substrings of length K or more from each starting index.<\/p>\n<h3>Step 2: Store Unique Substrings<\/h3>\n<p>Store the generated substrings in a set. Since a set does not allow duplicates, only distinct substrings will be stored. We can utilize the <code>set<\/code> data type in this process.<\/p>\n<h3>Step 3: Output Result<\/h3>\n<p>Finally, we count the number of substrings stored in the set and output the result. Now let&#8217;s convert these processes into code.<\/p>\n<h2>Python Code<\/h2>\n<pre><code>\ndef count_unique_dna_substrings(dna: str, k: int) -&gt; int:\n    unique_substrings = set()  # Set to store substrings\n    n = len(dna)\n\n    # Extract substrings for all starting positions in the string\n    for start in range(n):\n        for end in range(start + k, n + 1):  # Only consider lengths >= K\n            substring = dna[start:end]\n            unique_substrings.add(substring)\n\n    return len(unique_substrings)  # Return the count of unique substrings\n\n# Input\nif __name__ == \"__main__\":\n    dna_string = input(\"Please enter the DNA string: \")\n    k_value = int(input(\"Please enter the length K: \"))\n    \n    # Calculate and print the number of unique substrings\n    result = count_unique_dna_substrings(dna_string, k_value)\n    print(f\"The number of distinct substrings is: {result}\")\n    <\/code><\/pre>\n<h2>Code Explanation<\/h2>\n<p>The function <code>count_unique_dna_substrings<\/code> used in the above code takes two parameters: the <code>dna<\/code> string and the <code>k<\/code> value. This function first creates an empty set to prepare to store substrings. It then extracts substrings through a loop that will be explained in the next step.<\/p>\n<h3>Loop Explanation<\/h3>\n<p>The first loop iterates over the starting index (<code>start<\/code>) of the DNA string. The second loop extracts substrings of length K or more starting from the <code>start<\/code> index, thus determining the <code>end<\/code> index. Each substring is added to the set, only storing distinct cases.<\/p>\n<h3>Example for Understanding<\/h3>\n<p>For example, if the input DNA string is <code>ACGTACGT<\/code> and the value of K is 2, the possible substrings that can be generated are as follows:<\/p>\n<ul>\n<li>AC, ACG, ACGT, ACGTA, ACGTAC, ACGTACGT<\/li>\n<li>CG, CGT, CGTA, CGTAC, CGTACG<\/li>\n<li>GT, GTA, GTAC, GTACG<\/li>\n<li>TA, TAC, TACG<\/li>\n<li>AC, ACG, ACGT<\/li>\n<\/ul>\n<p>In total, there will be 14 distinct substrings.<\/p>\n<h2>Performance Considerations<\/h2>\n<p>The above code checks all substring lengths for every starting index, resulting in a worst-case time complexity of O(n^3). Performance issues may occur when the string length reaches 1000. To enhance performance in extreme cases, we can consider applying the <code>Sliding Window<\/code> technique.<\/p>\n<h3>Application of Sliding Window Technique<\/h3>\n<p>Using the Sliding Window technique allows us to easily calculate the number of substrings with length >= K in a single pass. It means storing information about the length of the string during one pass to facilitate exploration. This technique can reduce time complexity to O(n^2) or O(n).<\/p>\n<h3>Conclusion<\/h3>\n<p>In this course, we learned how to handle substrings of a string and resolve duplication issues using sets through the DNA password problem. Such problems frequently appear in coding tests, so it is recommended to be well-versed in basic string handling methods. In the next course, we will cover another useful algorithm problem.<\/p>\n<footer>\n<p>Stay tuned for the next course! Thank you for your interest and support.<\/p>\n<\/footer>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Many people are solving algorithm problems to prepare for coding tests. In this course, we will explore the DNA password problem and explain step by step how to solve it. Problem Description The DNA password consists of a specific pattern of combinations. The problem is to find how many substrings from the given DNA string &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33566\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Python 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":[145],"tags":[],"class_list":["post-33566","post","type-post","status-publish","format-standard","hentry","category-python-coding-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python 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\/33566\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python Coding Test Course, DNA Password - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Many people are solving algorithm problems to prepare for coding tests. In this course, we will explore the DNA password problem and explain step by step how to solve it. Problem Description The DNA password consists of a specific pattern of combinations. The problem is to find how many substrings from the given DNA string &hellip; \ub354 \ubcf4\uae30 &quot;Python Coding Test Course, DNA Password&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33566\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:17:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:47:36+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\/33566\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33566\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Python Coding Test Course, DNA Password\",\"datePublished\":\"2024-11-01T09:17:55+00:00\",\"dateModified\":\"2024-11-01T11:47:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33566\/\"},\"wordCount\":545,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Python Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33566\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33566\/\",\"name\":\"Python Coding Test Course, DNA Password - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:17:55+00:00\",\"dateModified\":\"2024-11-01T11:47:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33566\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33566\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33566\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python 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":"Python 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\/33566\/","og_locale":"ko_KR","og_type":"article","og_title":"Python Coding Test Course, DNA Password - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Many people are solving algorithm problems to prepare for coding tests. In this course, we will explore the DNA password problem and explain step by step how to solve it. Problem Description The DNA password consists of a specific pattern of combinations. The problem is to find how many substrings from the given DNA string &hellip; \ub354 \ubcf4\uae30 \"Python Coding Test Course, DNA Password\"","og_url":"https:\/\/atmokpo.com\/w\/33566\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:17:55+00:00","article_modified_time":"2024-11-01T11:47:36+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\/33566\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33566\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Python Coding Test Course, DNA Password","datePublished":"2024-11-01T09:17:55+00:00","dateModified":"2024-11-01T11:47:36+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33566\/"},"wordCount":545,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Python Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33566\/","url":"https:\/\/atmokpo.com\/w\/33566\/","name":"Python Coding Test Course, DNA Password - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:17:55+00:00","dateModified":"2024-11-01T11:47:36+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33566\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33566\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33566\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Python 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\/33566","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=33566"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33566\/revisions"}],"predecessor-version":[{"id":33567,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33566\/revisions\/33567"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}