{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-14938-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"701f95e9-f3e5-5627-8445-5aca98487092","excerpt":"n개의 도시, m의 수색 범위, r개의 길이 있다. 각 도시에 ni개의 아이템이 있을 때 수색 범위가 넘지 않는 선에서 아이템을 찾을 수 있는 최대 수를 출력하는 문제. 첫 풀이는 입력받는 길들을 인접 리스트 형식으로, 존재하지 않는 길은 INF…","html":"<p>n개의 도시, m의 수색 범위, r개의 길이 있다. 각 도시에 ni개의 아이템이 있을 때 수색 범위가 넘지 않는 선에서 아이템을 찾을 수 있는 최대 수를 출력하는 문제. 첫 풀이는 입력받는 길들을 인접 리스트 형식으로, 존재하지 않는 길은 INF로 입력을 받은 후 플로이드 와샬 방법을 이용하여 수색범위가 넘지 않았을 때 추가하는 방법으로 풀었으나 틀렸습니다 결과를 받게 되었다. 아마 추가적인 연산이 있지 않았을 까 의심된다. 두 번째 풀이는 인접 행렬을 이용한 다익스트라를 이용하여 풀었으며 수색 범위가 넘지 않았을 때 힙에 추가, 방문 확인 배열을 이용해 방문하지 않았던 도시들의 아이템만 연산하였다. 다익스트라 연산을 n번하여 찾은 최대값을 출력하여 풀었다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># import sys</span>\n<span class=\"token comment\"># INF = sys.maxsize</span>\n<span class=\"token comment\"># input = sys.stdin.readline</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># def floyd():</span>\n<span class=\"token comment\">#     get = [items[i] for i in range(n+1)]</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     for k in range(1, n+1):</span>\n<span class=\"token comment\">#         for i in range(1, n+1):</span>\n<span class=\"token comment\">#             if graph[i][k] &lt;= m:</span>\n<span class=\"token comment\">#                 get[i] += items[k]</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#             for j in range(1, n+1):</span>\n<span class=\"token comment\">#                 if graph[i][k] + graph[k][j] &lt;= m:</span>\n<span class=\"token comment\">#                     get[i] += items[j]</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     return max(get)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># n, m, r = map(int, input().split())</span>\n<span class=\"token comment\"># items = [0] + list(map(int, input().split()))</span>\n<span class=\"token comment\"># graph = [[INF for _ in range(n+1)] for _ in range(n+1)]</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># for _ in range(r):</span>\n<span class=\"token comment\">#     s, e, w = map(int, input().split())</span>\n<span class=\"token comment\">#     graph[s][e] = min(graph[s][e], w)</span>\n<span class=\"token comment\">#     graph[e][s] = min(graph[e][s], w)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># ans = floyd()</span>\n<span class=\"token comment\"># print(ans)</span>\n\n<span class=\"token keyword\">import</span> heapq\n<span class=\"token keyword\">import</span> sys\nINF <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>maxsize\n<span class=\"token builtin\">input</span> <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">dijkstra</span><span class=\"token punctuation\">(</span>start<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    q <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    heapq<span class=\"token punctuation\">.</span>heappush<span class=\"token punctuation\">(</span>q<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> start<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    visit <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token boolean\">False</span> <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    visit<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n    item <span class=\"token operator\">=</span> items<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span>\n\n    <span class=\"token keyword\">while</span> q<span class=\"token punctuation\">:</span>\n        weight<span class=\"token punctuation\">,</span> node <span class=\"token operator\">=</span> heapq<span class=\"token punctuation\">.</span>heappop<span class=\"token punctuation\">(</span>q<span class=\"token punctuation\">)</span>\n\n        <span class=\"token keyword\">for</span> nn<span class=\"token punctuation\">,</span> nw <span class=\"token keyword\">in</span> graph<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n            next_weight <span class=\"token operator\">=</span> weight <span class=\"token operator\">+</span> nw\n            <span class=\"token keyword\">if</span> next_weight <span class=\"token operator\">&lt;=</span> m<span class=\"token punctuation\">:</span>\n                heapq<span class=\"token punctuation\">.</span>heappush<span class=\"token punctuation\">(</span>q<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>next_weight<span class=\"token punctuation\">,</span> nn<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n                <span class=\"token keyword\">if</span> <span class=\"token keyword\">not</span> visit<span class=\"token punctuation\">[</span>nn<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                    visit<span class=\"token punctuation\">[</span>nn<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n                    item <span class=\"token operator\">+=</span> items<span class=\"token punctuation\">[</span>nn<span class=\"token punctuation\">]</span>\n\n    <span class=\"token keyword\">return</span> item\n\nn<span class=\"token punctuation\">,</span> m<span class=\"token punctuation\">,</span> r <span class=\"token operator\">=</span> <span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nitems <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> <span class=\"token builtin\">list</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\ngraph <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>i<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">for</span>  i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> n<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    s<span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">,</span> w <span class=\"token operator\">=</span> <span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    graph<span class=\"token punctuation\">[</span>s<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>e<span class=\"token punctuation\">,</span> w<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    graph<span class=\"token punctuation\">[</span>e<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>s<span class=\"token punctuation\">,</span> w<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\nans <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> n<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    ans <span class=\"token operator\">=</span> <span class=\"token builtin\">max</span><span class=\"token punctuation\">(</span>ans<span class=\"token punctuation\">,</span> dijkstra<span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>ans<span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-14938 - Python","date":"February 09, 2021"}}},"pageContext":{"slug":"/Algorithm/BOJ-14938-Python/","previous":{"fields":{"slug":"/Algorithm/BOJ-14502-Python/"},"frontmatter":{"title":"BOJ-14502 - Python","category":"Algorithm","draft":false}},"next":{"fields":{"slug":"/Algorithm/BOJ-12852-Python/"},"frontmatter":{"title":"BOJ-12852 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}