{"id":33742,"date":"2024-11-01T09:19:53","date_gmt":"2024-11-01T09:19:53","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33742"},"modified":"2024-11-01T11:46:54","modified_gmt":"2024-11-01T11:46:54","slug":"python-coding-test-course-finding-critical-path","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33742\/","title":{"rendered":"python coding test course, finding critical path"},"content":{"rendered":"<p><body><\/p>\n<p>In this course, we will learn about algorithms to solve the critical path problem. The Critical Path shows the start and completion times of each task in project management, representing the longest path to complete the entire project. It is a very important concept in engineering and software projects and is one of the frequently tested topics in actual coding interviews.<\/p>\n<h2>Problem Definition<\/h2>\n<p>We aim to address the problem of finding the critical path when given a directed graph with the following structure. Each node in the graph represents a task, and edges indicate the precedence relationships between tasks. What we need to calculate is the minimum time required to complete all tasks.<\/p>\n<h3>Problem Description<\/h3>\n<pre>\nInput:\n- n (1 \u2264 n \u2264 100): Number of tasks\n- edges: A list representing the dependency relationships between tasks, where each element is a tuple (u, v, w), \n  where u is the starting node of the task, v is the ending node of the task, and w is the time required to complete the task.\n\nOutput:\n- The longest time required to complete all tasks (length of the critical path)\n<\/pre>\n<h3>Example Input<\/h3>\n<pre>\nn = 5\nedges = [\n    (1, 2, 3),\n    (1, 3, 2),\n    (2, 4, 4),\n    (3, 4, 5),\n    (4, 5, 1)\n]\n<\/pre>\n<h3>Example Output<\/h3>\n<pre>\n8\n<\/pre>\n<h2>Problem Solving and Approach<\/h2>\n<p>To solve this problem, we can implement it by following these steps.<\/p>\n<h3>1. Representing the Directed Graph<\/h3>\n<p>First, we need to structure the graph based on the input edge information. To do this, we will construct the graph in the form of an adjacency list. We will also prepare an array to store the completion times of each task.<\/p>\n<pre><code>from collections import defaultdict\nimport sys\n\ndef critical_path(n, edges):\n    graph = defaultdict(list)\n    in_degree = [0] * (n + 1)\n    completion_time = [0] * (n + 1)\n\n    # Construct the graph and calculate in-degrees\n    for u, v, w in edges:\n        graph[u].append((v, w))\n        in_degree[v] += 1\n<\/code><\/pre>\n<h3>2. Topological Sorting<\/h3>\n<p>The next step is to perform a topological sort of the graph to safely process all tasks. Through topological sorting, we can determine the order in which each task should be completed while considering task dependencies.<\/p>\n<pre><code>    # Perform topological sort\n    zero_degree_queue = []\n    for i in range(1, n + 1):\n        if in_degree[i] == 0:\n            zero_degree_queue.append(i)\n    \n    topo_order = []\n    while zero_degree_queue:\n        node = zero_degree_queue.pop(0)\n        topo_order.append(node)\n        for neighbor, duration in graph[node]:\n            in_degree[neighbor] -= 1\n            if in_degree[neighbor] == 0:\n                zero_degree_queue.append(neighbor)\n<\/code><\/pre>\n<h3>3. Calculating Minimum Duration<\/h3>\n<p>Now, we calculate the completion times for each task in the order determined by the topological sort. Each time we perform a task, we update the completion times of all nodes connected to that task. This allows us to store the time taken to reach each task.<\/p>\n<pre><code>    for node in topo_order:\n        for neighbor, duration in graph[node]:\n            completion_time[neighbor] = max(completion_time[neighbor], completion_time[node] + duration)\n\n    # The maximum time required to complete all tasks\n    return max(completion_time)\n<\/code><\/pre>\n<h3>4. Writing the Complete Code<\/h3>\n<p>We will write the final code by integrating all the steps together.<\/p>\n<pre><code>def critical_path(n, edges):\n    graph = defaultdict(list)\n    in_degree = [0] * (n + 1)\n    completion_time = [0] * (n + 1)\n\n    # Construct the graph and calculate in-degrees\n    for u, v, w in edges:\n        graph[u].append((v, w))\n        in_degree[v] += 1\n\n    # Perform topological sort\n    zero_degree_queue = []\n    for i in range(1, n + 1):\n        if in_degree[i] == 0:\n            zero_degree_queue.append(i)\n    \n    topo_order = []\n    while zero_degree_queue:\n        node = zero_degree_queue.pop(0)\n        topo_order.append(node)\n        for neighbor, duration in graph[node]:\n            in_degree[neighbor] -= 1\n            if in_degree[neighbor] == 0:\n                zero_degree_queue.append(neighbor)\n\n    # Calculate the completion time for each task\n    for node in topo_order:\n        for neighbor, duration in graph[node]:\n            completion_time[neighbor] = max(completion_time[neighbor], completion_time[node] + duration)\n\n    # The maximum time required to complete all tasks\n    return max(completion_time)\n\n# Example execution\nif __name__ == \"__main__\":\n    n = 5\n    edges = [\n        (1, 2, 3),\n        (1, 3, 2),\n        (2, 4, 4),\n        (3, 4, 5),\n        (4, 5, 1)\n    ]\n    result = critical_path(n, edges)\n    print(\"Length of the critical path:\", result)\n<\/code><\/pre>\n<h2>Conclusion<\/h2>\n<p>In this lecture, we learned how to find the critical path. By using graph theory and topological sorting, we safely processed each task and calculated the time taken for each task to derive the critical path. This approach can ultimately be applied to various project management and scheduling problems.<\/p>\n<p>Moreover, in practical applications, such algorithms form the basis of complex project management and will significantly aid in enhancing efficiency. I hope you continue to improve your programming skills by tackling various algorithm problems in the future.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this course, we will learn about algorithms to solve the critical path problem. The Critical Path shows the start and completion times of each task in project management, representing the longest path to complete the entire project. It is a very important concept in engineering and software projects and is one of the frequently &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33742\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;python coding test course, finding critical path&#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-33742","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, finding critical path - \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\/33742\/\" \/>\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, finding critical path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this course, we will learn about algorithms to solve the critical path problem. The Critical Path shows the start and completion times of each task in project management, representing the longest path to complete the entire project. It is a very important concept in engineering and software projects and is one of the frequently &hellip; \ub354 \ubcf4\uae30 &quot;python coding test course, finding critical path&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33742\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:19:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:46:54+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\/33742\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33742\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"python coding test course, finding critical path\",\"datePublished\":\"2024-11-01T09:19:53+00:00\",\"dateModified\":\"2024-11-01T11:46:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33742\/\"},\"wordCount\":379,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Python Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33742\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33742\/\",\"name\":\"python coding test course, finding critical path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:19:53+00:00\",\"dateModified\":\"2024-11-01T11:46:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33742\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33742\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33742\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"python coding test course, finding critical path\"}]},{\"@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, finding critical path - \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\/33742\/","og_locale":"ko_KR","og_type":"article","og_title":"python coding test course, finding critical path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this course, we will learn about algorithms to solve the critical path problem. The Critical Path shows the start and completion times of each task in project management, representing the longest path to complete the entire project. It is a very important concept in engineering and software projects and is one of the frequently &hellip; \ub354 \ubcf4\uae30 \"python coding test course, finding critical path\"","og_url":"https:\/\/atmokpo.com\/w\/33742\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:19:53+00:00","article_modified_time":"2024-11-01T11:46:54+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\/33742\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33742\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"python coding test course, finding critical path","datePublished":"2024-11-01T09:19:53+00:00","dateModified":"2024-11-01T11:46:54+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33742\/"},"wordCount":379,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Python Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33742\/","url":"https:\/\/atmokpo.com\/w\/33742\/","name":"python coding test course, finding critical path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:19:53+00:00","dateModified":"2024-11-01T11:46:54+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33742\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33742\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33742\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"python coding test course, finding critical path"}]},{"@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\/33742","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=33742"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33742\/revisions"}],"predecessor-version":[{"id":33743,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33742\/revisions\/33743"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33742"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33742"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}