{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-1916-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"a1c7bd21-41fb-5935-82f9-d7a005fa7bab","excerpt":"도시 n개, 버스 노선 m개를 입력 받은 후, m개의 노선들을 ‘출발지 도착지 비용’과 같이 입력받은 후 ‘출발지 도착지’를 입력받아 출발지에서 도착지까지 가는 최소비용을 출력하는 문제. 다익스트라 문제로써 그래프에 {도착지1: 비용1}, {도착지2: 비용2, 도착지3: 비용…","html":"<p>도시 n개, 버스 노선 m개를 입력 받은 후, m개의 노선들을 ‘출발지 도착지 비용’과 같이 입력받은 후 ‘출발지 도착지’를 입력받아 출발지에서 도착지까지 가는 최소비용을 출력하는 문제. 다익스트라 문제로써 그래프에 [{도착지1: 비용1}, {도착지2: 비용2, 도착지3: 비용3}]과 같이 저장하여 인덱스를 출발지로 사용하였다. 그 후 힙연산, 각 노드마다 최소 비용을 저장하는 리스트를 이용하여 풀었으나 백준상에서 메모리 초과 결과를 받게 되었다. 그래프의 아이템들을 이용하는 반복문전에 저장돼 있는 값과 비교하는 부분을 넣어 메모리 초과를 해결하여 풀었다.재채점 결과 메모리초과가 되어 동일한 방법으로 문법만 편해진 방법으로 작성하여 풀었더니 CA 결과를 다시 받았다. 4달전에 비해서 많이 성장했다고 느꼈다.</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\"># import heapq</span>\n<span class=\"token comment\"># input = sys.stdin.readline</span>\n<span class=\"token comment\"># INF = sys.maxsize</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># def dijkstra(graph, s): # 그래프와 시작점</span>\n<span class=\"token comment\">#     q = []</span>\n<span class=\"token comment\">#     heapq.heappush(q, [0, s]) # 리스트 q에 [가중치, 도착지]와 같은 형태로 사용</span>\n<span class=\"token comment\">#     dist = [INF for _ in range(len(graph))] # 각 도착지까지의 최소 거리를 저장할 리스트</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     while q:</span>\n<span class=\"token comment\">#         weight, here = heapq.heappop(q)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#         if weight > dist[here]: # 현재 가중치가 저장돼 있는 가중치보다 클 시</span>\n<span class=\"token comment\">#             continue</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#         for there, next_weight in graph[here].items():</span>\n<span class=\"token comment\">#             # 그래프는 [{}, {도착지: 가중치, 도착지1: 가중치1}]과 같이 저장</span>\n<span class=\"token comment\">#             next = weight + next_weight # 현재 가중치와 그래프에 저장된 가중치를 더함</span>\n<span class=\"token comment\">#             dist[there] = min(dist[there], next) # 저장돼 있는 것과 비교하여 저장</span>\n<span class=\"token comment\">#             heapq.heappush(q, [next, there]) # 리스트 q에 [다음 가중치, 다음 도착지]를 힙 연산을 통해 넣음</span>\n<span class=\"token comment\">#     return dist</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># n = int(input())</span>\n<span class=\"token comment\"># m = int(input())</span>\n<span class=\"token comment\"># graph = [{} for _ in range(n+1)]</span>\n<span class=\"token comment\"># for _ in range(m):</span>\n<span class=\"token comment\">#     u, v, w = map(int, input().split())</span>\n<span class=\"token comment\">#     # 출발지, 도착지가 같을 때 더욱 작은 값을 저장</span>\n<span class=\"token comment\">#     if v in graph[u]:</span>\n<span class=\"token comment\">#         graph[u][v] = min(w, graph[u][v])</span>\n<span class=\"token comment\">#     else:</span>\n<span class=\"token comment\">#         graph[u][v] = w</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># start, end = map(int, input().split())</span>\n<span class=\"token comment\"># print(dijkstra(graph, start)[end])</span>\n\n\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\nINF <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>maxsize\n<span class=\"token keyword\">import</span> heapq\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    dist <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>\n    dist<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</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\n    <span class=\"token keyword\">while</span> q<span class=\"token punctuation\">:</span>\n        now_weight<span class=\"token punctuation\">,</span> now <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\">if</span> dist<span class=\"token punctuation\">[</span>now<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span> now_weight<span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">continue</span>\n\n        <span class=\"token keyword\">for</span> <span class=\"token builtin\">next</span><span class=\"token punctuation\">,</span> weight <span class=\"token keyword\">in</span> graph<span class=\"token punctuation\">[</span>now<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n            next_weight <span class=\"token operator\">=</span> now_weight <span class=\"token operator\">+</span> weight\n            <span class=\"token keyword\">if</span> dist<span class=\"token punctuation\">[</span><span class=\"token builtin\">next</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">></span> next_weight<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> <span class=\"token builtin\">next</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n                dist<span class=\"token punctuation\">[</span><span class=\"token builtin\">next</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> next_weight\n    <span class=\"token keyword\">return</span> dist\n\n\nn <span class=\"token operator\">=</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>\nm <span class=\"token operator\">=</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>\n\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>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> _ <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    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\nstart<span class=\"token punctuation\">,</span> end <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>\ndist <span class=\"token operator\">=</span> dijkstra<span class=\"token punctuation\">(</span>start<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>dist<span class=\"token punctuation\">[</span>end<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-1916 - Python","date":"November 01, 2020"}}},"pageContext":{"slug":"/Algorithm/BOJ-1916-Python/","previous":{"fields":{"slug":"/Algorithm/BOJ-15657-Python/"},"frontmatter":{"title":"BOJ-15657 - Python","category":"Algorithm","draft":false}},"next":{"fields":{"slug":"/Algorithm/BOJ-1158-Python/"},"frontmatter":{"title":"BOJ-1158 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}