{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-11657-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"c84b06d7-4a1e-51f1-a8b4-3a4e80113f25","excerpt":"n, m 각각 정점, 간선의 수를 입력받은 후에 m만큼 s, e, w, 시작점, 도착점, 가중치를 입력받으며 가중치는 음수가 입력될 수도 있다. 시작점은 1이며 다른 정점까지 도착하는 최소 가중치를 출력하되, 네거티브 사이클이 있을 때는 -1을, 도착하지 못하는 정점은 -1을 출력하는 문제. 첫풀이는 벨만포드 알고리즘을 이용하여 모든 간선을 수행한 거리 값을 저장한 후 다시 모든 간선을 수행할 때 값의 차이가 보일 때 네거티브 사이클이 있다 판명하도록 풀었으나 틀렸습니다 결과를 받게되어 BOJ…","html":"<p>n, m 각각 정점, 간선의 수를 입력받은 후에 m만큼 s, e, w, 시작점, 도착점, 가중치를 입력받으며 가중치는 음수가 입력될 수도 있다. 시작점은 1이며 다른 정점까지 도착하는 최소 가중치를 출력하되, 네거티브 사이클이 있을 때는 -1을, 도착하지 못하는 정점은 -1을 출력하는 문제. 첫풀이는 벨만포드 알고리즘을 이용하여 모든 간선을 수행한 거리 값을 저장한 후 다시 모든 간선을 수행할 때 값의 차이가 보일 때 네거티브 사이클이 있다 판명하도록 풀었으나 틀렸습니다 결과를 받게되어 <a href=\"../master/python/BOJ_1865.py\">BOJ 1865</a>와 같이 3중 반복문을 수행하여 풀었다. i가 마지막 정점인 것만 확인 시에 1과 이어져있지 않은 정점이지만 네거티브 사이클이 있는 예외 경우가 존재하여 최대 간선의 수와 가중치의 최대 값을 곱한 값보다 작으며 계속해서 줄어들 경우만 예외처리하여 풀었다.</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 relax():</span>\n<span class=\"token comment\">#     for start in range(n+1):</span>\n<span class=\"token comment\">#         for end, weight in graph[start]:</span>\n<span class=\"token comment\">#             next_weight = dist[start] + weight</span>\n<span class=\"token comment\">#             if dist[end] > next_weight:</span>\n<span class=\"token comment\">#                 dist[end] = next_weight</span>\n<span class=\"token comment\">#     return dist</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># def bellman():</span>\n<span class=\"token comment\">#     for start in range(n+1):</span>\n<span class=\"token comment\">#         for end, weight in graph[start]:</span>\n<span class=\"token comment\">#             next_weight = dist[start] + weight</span>\n<span class=\"token comment\">#             if dist[end] > next_weight:</span>\n<span class=\"token comment\">#                 return False</span>\n<span class=\"token comment\">#     return True</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># n, m = map(int, input().split())</span>\n<span class=\"token comment\"># graph = [[] for _ in range(n+1)]</span>\n<span class=\"token comment\"># dist = [INF for _ in range(n+1)]</span>\n<span class=\"token comment\"># dist[1] = 0</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># for _ in range(m):</span>\n<span class=\"token comment\">#     s, e, w = map(int, input().split())</span>\n<span class=\"token comment\">#     graph[s].append([e, w])</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># short = relax()</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># if bellman():</span>\n<span class=\"token comment\">#     for i in range(2, n+1):</span>\n<span class=\"token comment\">#         print(short[i] if short[i] != INF else -1)</span>\n<span class=\"token comment\"># else:</span>\n<span class=\"token comment\">#     print(-1)</span>\n\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\">bellman</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</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        <span class=\"token keyword\">for</span> start <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            <span class=\"token keyword\">for</span> end<span class=\"token punctuation\">,</span> weight <span class=\"token keyword\">in</span> graph<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                next_weight <span class=\"token operator\">=</span> weight <span class=\"token operator\">+</span> dist<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span>\n                <span class=\"token keyword\">if</span> dist<span class=\"token punctuation\">[</span>end<span class=\"token punctuation\">]</span> <span class=\"token operator\">></span> next_weight<span class=\"token punctuation\">:</span>\n                    <span class=\"token keyword\">if</span> i <span class=\"token operator\">==</span> n <span class=\"token keyword\">and</span> next_weight <span class=\"token operator\">&lt;</span> <span class=\"token number\">60000001</span><span class=\"token punctuation\">:</span>\n                        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n                        sys<span class=\"token punctuation\">.</span>exit<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n                    dist<span class=\"token punctuation\">[</span>end<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> next_weight\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>rstrip<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>\ngraph <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</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>\ndist <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>INF <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>\ndist<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</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>rstrip<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\nbellman<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> dist<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><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>i <span class=\"token keyword\">if</span> i <span class=\"token operator\">&lt;</span> <span class=\"token number\">60000001</span> <span class=\"token keyword\">else</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-11657 - Python","date":"November 12, 2020"}}},"pageContext":{"slug":"/Algorithm/BOJ-11657-Python/","previous":{"fields":{"slug":"/Algorithm/BOJ-2579-Python/"},"frontmatter":{"title":"BOJ-2579 - Python","category":"Algorithm","draft":false}},"next":{"fields":{"slug":"/Algorithm/BOJ-1918-Python/"},"frontmatter":{"title":"BOJ-1918 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}