{"id":33400,"date":"2024-11-01T09:16:10","date_gmt":"2024-11-01T09:16:10","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33400"},"modified":"2024-11-01T11:38:51","modified_gmt":"2024-11-01T11:38:51","slug":"java-coding-test-course-salesmans-concerns","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33400\/","title":{"rendered":"Java Coding Test Course, Salesman&#8217;s Concerns"},"content":{"rendered":"<p><body><\/p>\n<h2>Problem Description<\/h2>\n<p>\n        There is a salesman with N cities, and this salesman must visit all cities once and return to the starting city.<br \/>\n        The distance information between each city is given, and the goal is to find the shortest path.<br \/>\n        To solve this problem, algorithms for shortest path exploration can be used, such as backtracking, dynamic programming, or bitmasking.\n    <\/p>\n<h3>Input Format<\/h3>\n<p>\n        The first line contains the number of cities N. Following this, an N x N matrix is given,<br \/>\n        where <code>matrix[i][j]<\/code> represents the distance from city i to city j.<br \/>\n        Note that <code>matrix[i][i]<\/code> is always 0.\n    <\/p>\n<h3>Output Format<\/h3>\n<p>\n        Output the minimum cost for the salesman to visit all cities once and return to the starting point.\n    <\/p>\n<h2>Example<\/h2>\n<pre>\n    Input:\n    4\n    0 10 15 20\n    10 0 35 25\n    15 35 0 30\n    20 25 30 0\n\n    Output:\n    80\n    <\/pre>\n<h2>Problem Solving Process<\/h2>\n<p>\n        This problem is a classic Traveling Salesman Problem (TSP), which involves finding the shortest path for the salesman to visit all cities and return to the starting point.<br \/>\n        This problem is NP-complete, meaning that as the number of cities increases, the computational requirements to find a solution grow exponentially.<br \/>\n        Therefore, various approaches can be considered.\n    <\/p>\n<h3>1. Backtracking<\/h3>\n<p>\n        Backtracking is a method that explores all paths recursively, searching for the optimal path. However, as the number of cities increases, the computation time also increases.\n    <\/p>\n<h3>2. Dynamic Programming<\/h3>\n<p>\n        The dynamic programming approach utilizes memoization techniques to store already computed shortest distances for paths, preventing redundant calculations.<br \/>\n        Following this methodology, the minimum cost for specific sets of cities is stored, and sub-problems are solved to construct a solution for the overall problem.\n    <\/p>\n<h3>3. Bitmasking<\/h3>\n<p>\n        Bitmasking is a technique that represents each city with a bit to manage all visit states efficiently.<br \/>\n        It allows management of which cities the salesman has visited effectively.<br \/>\n        This method is particularly effective when combined with dynamic programming.\n    <\/p>\n<h2>Algorithm Implementation<\/h2>\n<h3>1. Dynamic Programming Using Bitmasking<\/h3>\n<pre>\n    <code>\n    import java.util.Arrays;\n\n    public class TravelingSalesman {\n        static final int INF = Integer.MAX_VALUE;\n        static int[][] dist;\n        static int[][] dp;\n        static int n;\n\n        public static void main(String[] args) {\n            \/\/ Example Input\n            n = 4; \/\/ Number of cities\n            dist = new int[][] {\n                {0, 10, 15, 20},\n                {10, 0, 35, 25},\n                {15, 35, 0, 30},\n                {20, 25, 30, 0}\n            };\n\n            \/\/ Initialize DP array\n            dp = new int[n][1 &lt;&lt; n];\n            for (int[] row : dp) {\n                Arrays.fill(row, -1);\n            }\n\n            \/\/ Calculate shortest path\n            int result = tsp(0, 1);\n            System.out.println(\"Minimum cost: \" + result);\n        }\n\n        static int tsp(int pos, int mask) {\n            if (mask == (1 &lt;&lt; n) - 1) { \/\/ All cities visited\n                return dist[pos][0]; \/\/ Return to starting city\n            }\n\n            if (dp[pos][mask] != -1) {\n                return dp[pos][mask]; \/\/ Return memoized value\n            }\n\n            int ans = INF;\n\n            \/\/ Loop through all cities\n            for (int city = 0; city &lt; n; city++) {\n                if ((mask &amp; (1 &lt;&lt; city)) == 0) { \/\/ If the city has not been visited\n                    ans = Math.min(ans, dist[pos][city] + tsp(city, mask | (1 &lt;&lt; city)));\n                }\n            }\n\n            return dp[pos][mask] = ans; \/\/ Memoize current state\n        }\n    }\n    <\/code>\n    <\/pre>\n<h2>Conclusion<\/h2>\n<p>\n        This problem represents a classic route optimization problem where the salesman must visit each city once and return to the starting city, allowing for various algorithmic approaches.<br \/>\n        The implementation utilizing bitmasking and dynamic programming allows for quick calculations when the number of cities is small and can also accommodate other techniques for handling multiple cities.<br \/>\n        Developing algorithmic thinking through such problems is essential, as it will be very useful for coding interviews and actual projects.\n    <\/p>\n<h4>References<\/h4>\n<ul>\n<li>Introduction to Algorithms, by Thomas H. Cormen et al.<\/li>\n<li>Online Resources on Dynamic Programming and Traveling Salesman Problem<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem Description There is a salesman with N cities, and this salesman must visit all cities once and return to the starting city. The distance information between each city is given, and the goal is to find the shortest path. To solve this problem, algorithms for shortest path exploration can be used, such as backtracking, &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33400\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Java Coding Test Course, Salesman&#8217;s Concerns&#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":[139],"tags":[],"class_list":["post-33400","post","type-post","status-publish","format-standard","hentry","category-java-coding-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java Coding Test Course, Salesman&#039;s Concerns - \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\/33400\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java Coding Test Course, Salesman&#039;s Concerns - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Problem Description There is a salesman with N cities, and this salesman must visit all cities once and return to the starting city. The distance information between each city is given, and the goal is to find the shortest path. To solve this problem, algorithms for shortest path exploration can be used, such as backtracking, &hellip; \ub354 \ubcf4\uae30 &quot;Java Coding Test Course, Salesman&#8217;s Concerns&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33400\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:16:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:38:51+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\/33400\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33400\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Java Coding Test Course, Salesman&#8217;s Concerns\",\"datePublished\":\"2024-11-01T09:16:10+00:00\",\"dateModified\":\"2024-11-01T11:38:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33400\/\"},\"wordCount\":391,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Java Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33400\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33400\/\",\"name\":\"Java Coding Test Course, Salesman's Concerns - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:16:10+00:00\",\"dateModified\":\"2024-11-01T11:38:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33400\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33400\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33400\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java Coding Test Course, Salesman&#8217;s Concerns\"}]},{\"@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":"Java Coding Test Course, Salesman's Concerns - \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\/33400\/","og_locale":"ko_KR","og_type":"article","og_title":"Java Coding Test Course, Salesman's Concerns - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Problem Description There is a salesman with N cities, and this salesman must visit all cities once and return to the starting city. The distance information between each city is given, and the goal is to find the shortest path. To solve this problem, algorithms for shortest path exploration can be used, such as backtracking, &hellip; \ub354 \ubcf4\uae30 \"Java Coding Test Course, Salesman&#8217;s Concerns\"","og_url":"https:\/\/atmokpo.com\/w\/33400\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:16:10+00:00","article_modified_time":"2024-11-01T11:38:51+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\/33400\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33400\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Java Coding Test Course, Salesman&#8217;s Concerns","datePublished":"2024-11-01T09:16:10+00:00","dateModified":"2024-11-01T11:38:51+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33400\/"},"wordCount":391,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Java Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33400\/","url":"https:\/\/atmokpo.com\/w\/33400\/","name":"Java Coding Test Course, Salesman's Concerns - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:16:10+00:00","dateModified":"2024-11-01T11:38:51+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33400\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33400\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33400\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Java Coding Test Course, Salesman&#8217;s Concerns"}]},{"@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\/33400","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=33400"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33400\/revisions"}],"predecessor-version":[{"id":33401,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33400\/revisions\/33401"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}