{"id":34832,"date":"2024-11-01T09:32:30","date_gmt":"2024-11-01T09:32:30","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34832"},"modified":"2024-11-01T11:26:20","modified_gmt":"2024-11-01T11:26:20","slug":"swift-coding-test-course-finding-the-critical-path","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34832\/","title":{"rendered":"Swift Coding Test Course, Finding the Critical Path"},"content":{"rendered":"<p><body><\/p>\n<h2>1. Problem Definition<\/h2>\n<p>The critical path problem is an important problem in graph theory, which calculates the minimum time required to complete a given set of tasks. Each task has a structure of dependencies on other tasks, which determines the execution order of the tasks. Through this problem, we need to create an optimal schedule that considers the dependencies between tasks.<\/p>\n<h2>2. Problem Description<\/h2>\n<p>Based on the given list of tasks and the execution time of each task, calculate the minimum time required to complete all tasks. The tasks are given in the following format:<\/p>\n<pre><code>\n    tasks = [\n        (1, 3, [2]),        \/\/ Task 1 can start after Task 2 is completed\n        (2, 2, []),         \/\/ Task 2 can be performed independently\n        (3, 4, [1, 2])      \/\/ Task 3 can start after Tasks 1 and 2 are completed\n    ]\n    <\/code><\/pre>\n<h3>Input Format<\/h3>\n<p>Each task is composed of a tuple, where the first element is the task ID, the second element is the execution time of the task, and the third element is a list of task IDs that it depends on.<\/p>\n<h3>Output Format<\/h3>\n<p>Output an integer representing the minimum time required to complete all tasks.<\/p>\n<h2>3. Solution Process<\/h2>\n<p>To solve this problem, we will follow these procedures.<\/p>\n<ol>\n<li><strong>Creating the Dependency Graph:<\/strong> Represent the dependencies between tasks in the form of a graph.<\/li>\n<li><strong>Finding the Longest Path:<\/strong> Use Depth-First Search (DFS) to find the longest path in order to calculate the start time of each task.<\/li>\n<li><strong>Calculating the Final Time:<\/strong> Calculate the time required to complete all tasks.<\/li>\n<\/ol>\n<h3>3-1. Creating the Dependency Graph<\/h3>\n<p>First, we transform the input tasks into a graph structure. Each task is represented as a node, and the dependencies are represented as edges.<\/p>\n<h3>3-2. Finding the Longest Path<\/h3>\n<p>Using depth-first search, we determine the timing for when each task can start. We record the start time of the task considering when its dependency tasks are finished. Then, we must visit all tasks to find the longest path.<\/p>\n<h3>3-3. Calculating the Final Time<\/h3>\n<p>Based on the time required to complete all tasks, we determine the completion time of the final task to calculate the minimum time.<\/p>\n<h2>4. Swift Code Implementation<\/h2>\n<p>Below is the Swift code based on the algorithm above.<\/p>\n<pre><code>\n    import Foundation\n\n    struct Task {\n        let id: Int\n        let time: Int\n        let dependencies: [Int]\n    }\n\n    func minimumCompletionTime(tasks: [Task]) -> Int {\n        var graph = [Int: [Int]]() \/\/ Dependency graph\n        var inDegree = [Int: Int]() \/\/ In-degree\n        var completionTime = [Int: Int]() \/\/ Store completion time\n\n        \/\/ Initialize the graph and in-degrees\n        for task in tasks {\n            graph[task.id] = []\n            inDegree[task.id] = task.dependencies.count\n            completionTime[task.id] = 0\n        }\n\n        \/\/ Create the graph\n        for task in tasks {\n            for dependency in task.dependencies {\n                graph[dependency]?.append(task.id)\n            }\n        }\n\n        var queue = [Int]() \/\/ Tasks that can start\n        for task in tasks {\n            if inDegree[task.id] == 0 {\n                queue.append(task.id)\n                completionTime[task.id] = task.time \/\/ Initialize the time for independent tasks\n            }\n        }\n\n        var maxCompletionTime = 0\n\n        \/\/ Queue for topological sorting\n        while !queue.isEmpty {\n            let currentTaskId = queue.removeFirst()\n            let currentTaskTime = completionTime[currentTaskId]!\n\n            \/\/ Visit child tasks of the current task\n            for dependentTaskId in graph[currentTaskId]! {\n                completionTime[dependentTaskId] = max(completionTime[dependentTaskId]!, currentTaskTime + tasks.first { $0.id == dependentTaskId }!.time)\n\n                \/\/ Decrease the in-degree\n                inDegree[dependentTaskId]! -= 1\n                \/\/ Add to the queue if the in-degree is 0\n                if inDegree[dependentTaskId] == 0 {\n                    queue.append(dependentTaskId)\n                }\n            }\n            maxCompletionTime = max(maxCompletionTime, currentTaskTime)\n        }\n\n        return maxCompletionTime\n    }\n\n    \/\/ Test case\n    let tasks = [\n        Task(id: 1, time: 3, dependencies: [2]),\n        Task(id: 2, time: 2, dependencies: []),\n        Task(id: 3, time: 4, dependencies: [1, 2])\n    ]\n\n    let result = minimumCompletionTime(tasks: tasks)\n    print(\"Minimum time required to complete all tasks: \\(result) seconds\")\n    <\/code><\/pre>\n<h2>5. Code Explanation<\/h2>\n<p>The code above constructs a graph to solve the critical path problem and calculates the completion time for each task through depth-first search. It checks the dependencies for each task, updating completion times, and ultimately outputs the minimum time needed to complete all tasks.<\/p>\n<h2>6. Conclusion<\/h2>\n<p>The critical path problem is an important algorithmic problem for managing dependencies between tasks. By solving this problem, one can enhance their understanding of graph theory, and it is also a frequently posed type in coding tests. Let&#8217;s practice various forms of problems based on the methods described above!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Problem Definition The critical path problem is an important problem in graph theory, which calculates the minimum time required to complete a given set of tasks. Each task has a structure of dependencies on other tasks, which determines the execution order of the tasks. Through this problem, we need to create an optimal schedule &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34832\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Swift Coding Test Course, Finding the 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":[129],"tags":[],"class_list":["post-34832","post","type-post","status-publish","format-standard","hentry","category-swift-coding-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Swift Coding Test Course, Finding the 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\/34832\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Swift Coding Test Course, Finding the Critical Path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"1. Problem Definition The critical path problem is an important problem in graph theory, which calculates the minimum time required to complete a given set of tasks. Each task has a structure of dependencies on other tasks, which determines the execution order of the tasks. Through this problem, we need to create an optimal schedule &hellip; \ub354 \ubcf4\uae30 &quot;Swift Coding Test Course, Finding the Critical Path&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34832\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:32:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:26:20+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\/34832\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34832\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Swift Coding Test Course, Finding the Critical Path\",\"datePublished\":\"2024-11-01T09:32:30+00:00\",\"dateModified\":\"2024-11-01T11:26:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34832\/\"},\"wordCount\":428,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Swift Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34832\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34832\/\",\"name\":\"Swift Coding Test Course, Finding the Critical Path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:32:30+00:00\",\"dateModified\":\"2024-11-01T11:26:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34832\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34832\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34832\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Swift Coding Test Course, Finding the 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":"Swift Coding Test Course, Finding the 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\/34832\/","og_locale":"ko_KR","og_type":"article","og_title":"Swift Coding Test Course, Finding the Critical Path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"1. Problem Definition The critical path problem is an important problem in graph theory, which calculates the minimum time required to complete a given set of tasks. Each task has a structure of dependencies on other tasks, which determines the execution order of the tasks. Through this problem, we need to create an optimal schedule &hellip; \ub354 \ubcf4\uae30 \"Swift Coding Test Course, Finding the Critical Path\"","og_url":"https:\/\/atmokpo.com\/w\/34832\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:32:30+00:00","article_modified_time":"2024-11-01T11:26:20+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\/34832\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34832\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Swift Coding Test Course, Finding the Critical Path","datePublished":"2024-11-01T09:32:30+00:00","dateModified":"2024-11-01T11:26:20+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34832\/"},"wordCount":428,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Swift Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34832\/","url":"https:\/\/atmokpo.com\/w\/34832\/","name":"Swift Coding Test Course, Finding the Critical Path - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:32:30+00:00","dateModified":"2024-11-01T11:26:20+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34832\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34832\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34832\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Swift Coding Test Course, Finding the 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\/34832","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=34832"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34832\/revisions"}],"predecessor-version":[{"id":34833,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34832\/revisions\/34833"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}