{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-1939-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"0ede670d-1802-5cea-841d-2c87ec47fbf6","excerpt":"n개의 섬에 양방향 m개의 다리가 있다. 이 때 해당 다리가 옮길 수 있는 최대 무게가 주어진다. 출발 섬과 도착 섬이 주어질 때 옮길 수 있는 최대 무게를 출력하는 문제. 분리집합 방식으로 풀었다. 입력받는 다리들을 Max heap형태로 저장 후, 모든 입력이 끝나면 각 다리의 두 섬을 union 연산한다. 그 후 정답을 찾을 두 섬의 parent 노드를 find 연산을 이용하여 비교하여 같을 시 현재 반복중인 다리의 길이를 출력하여 풀었다.","html":"<p>n개의 섬에 양방향 m개의 다리가 있다. 이 때 해당 다리가 옮길 수 있는 최대 무게가 주어진다. 출발 섬과 도착 섬이 주어질 때 옮길 수 있는 최대 무게를 출력하는 문제. 분리집합 방식으로 풀었다. 입력받는 다리들을 Max heap형태로 저장 후, 모든 입력이 끝나면 각 다리의 두 섬을 union 연산한다. 그 후 정답을 찾을 두 섬의 parent 노드를 find 연산을 이용하여 비교하여 같을 시 현재 반복중인 다리의 길이를 출력하여 풀었다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> heapq\n<span class=\"token keyword\">import</span> sys\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\">find</span><span class=\"token punctuation\">(</span>node<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> node <span class=\"token operator\">==</span> parent<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> node\n\n    p <span class=\"token operator\">=</span> find<span class=\"token punctuation\">(</span>parent<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    parent<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> p\n    <span class=\"token keyword\">return</span> p\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">union</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    pa<span class=\"token punctuation\">,</span> pb <span class=\"token operator\">=</span> find<span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> find<span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">if</span> pa <span class=\"token operator\">!=</span> pb<span class=\"token punctuation\">:</span>\n        parent<span class=\"token punctuation\">[</span>pb<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> pa\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">solve</span><span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">while</span> bridges<span class=\"token punctuation\">:</span>\n        w<span class=\"token punctuation\">,</span> n1<span class=\"token punctuation\">,</span> n2 <span class=\"token operator\">=</span> heapq<span class=\"token punctuation\">.</span>heappop<span class=\"token punctuation\">(</span>bridges<span class=\"token punctuation\">)</span>\n        w <span class=\"token operator\">=</span> <span class=\"token builtin\">abs</span><span class=\"token punctuation\">(</span>w<span class=\"token punctuation\">)</span>\n        union<span class=\"token punctuation\">(</span>n1<span class=\"token punctuation\">,</span> n2<span class=\"token punctuation\">)</span>\n\n        <span class=\"token keyword\">if</span> find<span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> find<span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">return</span> w\n\n\nn<span class=\"token punctuation\">,</span> m <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>\nparent <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>i <span class=\"token keyword\">for</span> i <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>\nbridges <span class=\"token operator\">=</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>m<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    heapq<span class=\"token punctuation\">.</span>heappush<span class=\"token punctuation\">(</span>bridges<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span>w<span class=\"token punctuation\">,</span> s<span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\ns<span class=\"token punctuation\">,</span> e <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<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>solve<span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-1939 - Python","date":"February 17, 2021"}}},"pageContext":{"slug":"/Algorithm/BOJ-1939-Python/","previous":{"fields":{"slug":"/Algorithm/BOJ-2268-Python/"},"frontmatter":{"title":"BOJ-2268 - Python","category":"Algorithm","draft":false}},"next":{"fields":{"slug":"/Algorithm/BOJ-1788-Python/"},"frontmatter":{"title":"BOJ-1788 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}