{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-3055-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"5a279115-f8e6-596b-b7a3-6fa5d73bd377","excerpt":"S, D, ”*”, ”.”, X로 이루어진 y, x 크기의 그래프가 주어진다. S와 D는 출발점과 도착점이고 ”.”은 빈 공간, X는 벽, ”*“은 물이다. 물은 1초마다 상하좌우로 퍼지며 물이 퍼진 곳과 곧 퍼질 곳 (같은 초)에는 이동할 수 없다. S에서 D까지 가장 빨리 도착했을 때의 시간을 출력하는 문제. 그래프와 같은 크기의 물이 퍼지는 시간을 저장하며 기본 값을 XY값인 배열을 만들어 사용하였다. dfs…","html":"<p>S, D, ”*”, ”.”, X로 이루어진 y, x 크기의 그래프가 주어진다. S와 D는 출발점과 도착점이고 ”.”은 빈 공간, X는 벽, ”*“은 물이다. 물은 1초마다 상하좌우로 퍼지며 물이 퍼진 곳과 곧 퍼질 곳 (같은 초)에는 이동할 수 없다. S에서 D까지 가장 빨리 도착했을 때의 시간을 출력하는 문제. 그래프와 같은 크기의 물이 퍼지는 시간을 저장하며 기본 값을 XY값인 배열을 만들어 사용하였다. dfs 연산을 통해 물의 최단 이동시간을 저장하였다. 동일한 조건의 배열과 동일한 조건에 물이 퍼지는 시간보다 작을 때의 조건을 추가하여 S에서 이동하는 거리를 dfs 연산을 통해 저장하였다. 그 후 S에서 이동한 거리 중 D의 값이 XY일 때는 도착할 수 없음을, 아닐 시 해당 값을 출력하여 풀었다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> sys\n<span class=\"token keyword\">from</span> collections <span class=\"token keyword\">import</span> deque\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\ndire <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</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 number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">water_move</span><span class=\"token punctuation\">(</span>wdist<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">while</span> water<span class=\"token punctuation\">:</span>\n        y<span class=\"token punctuation\">,</span> x <span class=\"token operator\">=</span> water<span class=\"token punctuation\">.</span>popleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        now_value <span class=\"token operator\">=</span> wdist<span class=\"token punctuation\">[</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span>\n\n        <span class=\"token keyword\">for</span> ty<span class=\"token punctuation\">,</span> tx <span class=\"token keyword\">in</span> dire<span class=\"token punctuation\">:</span>\n            ny<span class=\"token punctuation\">,</span> nx <span class=\"token operator\">=</span> y <span class=\"token operator\">+</span> ty<span class=\"token punctuation\">,</span> x <span class=\"token operator\">+</span> tx\n            <span class=\"token keyword\">if</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> ny <span class=\"token operator\">&lt;</span> Y <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> nx <span class=\"token operator\">&lt;</span> X<span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> wdist<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span> <span class=\"token operator\">></span> now_value <span class=\"token operator\">+</span> <span class=\"token number\">1</span> <span class=\"token keyword\">and</span> graph<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\".\"</span><span class=\"token punctuation\">:</span>\n                    wdist<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> now_value <span class=\"token operator\">+</span> <span class=\"token number\">1</span>\n                    water<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">,</span> nx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">dochi_move</span><span class=\"token punctuation\">(</span>dist<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">while</span> dochi<span class=\"token punctuation\">:</span>\n        y<span class=\"token punctuation\">,</span> x <span class=\"token operator\">=</span> dochi<span class=\"token punctuation\">.</span>popleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        now_value <span class=\"token operator\">=</span> dist<span class=\"token punctuation\">[</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span>\n\n        <span class=\"token keyword\">for</span> ty<span class=\"token punctuation\">,</span> tx <span class=\"token keyword\">in</span> dire<span class=\"token punctuation\">:</span>\n            ny<span class=\"token punctuation\">,</span> nx <span class=\"token operator\">=</span> y <span class=\"token operator\">+</span> ty<span class=\"token punctuation\">,</span> x <span class=\"token operator\">+</span> tx\n            <span class=\"token keyword\">if</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> ny <span class=\"token operator\">&lt;</span> Y <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> nx <span class=\"token operator\">&lt;</span> X<span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> wdist<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span> <span class=\"token operator\">></span> now_value <span class=\"token operator\">+</span> 1and <span class=\"token punctuation\">(</span>graph<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\".\"</span> <span class=\"token keyword\">or</span> graph<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"D\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                    <span class=\"token keyword\">if</span> dist<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span> <span class=\"token operator\">></span> now_value <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n                        dist<span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>nx<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> now_value <span class=\"token operator\">+</span> <span class=\"token number\">1</span>\n                        dochi<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>ny<span class=\"token punctuation\">,</span> nx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\nY<span class=\"token punctuation\">,</span> X <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>\ngraph <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token builtin\">list</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> <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>Y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n\nwdist <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span>X<span class=\"token operator\">*</span>Y <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>X<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>Y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\ndist <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span>X<span class=\"token operator\">*</span>Y <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>X<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>Y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\nwater <span class=\"token operator\">=</span> deque<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\ndochi <span class=\"token operator\">=</span> deque<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> y <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>Y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>X<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> graph<span class=\"token punctuation\">[</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'*'</span><span class=\"token punctuation\">:</span>\n            water<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>y<span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n            wdist<span class=\"token punctuation\">[</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n        <span class=\"token keyword\">elif</span> graph<span class=\"token punctuation\">[</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'S'</span><span class=\"token punctuation\">:</span>\n            dochi<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>y<span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n            dist<span class=\"token punctuation\">[</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n        <span class=\"token keyword\">elif</span> graph<span class=\"token punctuation\">[</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'D'</span><span class=\"token punctuation\">:</span>\n            endY<span class=\"token punctuation\">,</span> endX <span class=\"token operator\">=</span> y<span class=\"token punctuation\">,</span> x\n\nwater_move<span class=\"token punctuation\">(</span>wdist<span class=\"token punctuation\">)</span>\ndochi_move<span class=\"token punctuation\">(</span>dist<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"KAKTUS\"</span> <span class=\"token keyword\">if</span> dist<span class=\"token punctuation\">[</span>endY<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>endX<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> Y <span class=\"token operator\">*</span> X <span class=\"token keyword\">else</span> dist<span class=\"token punctuation\">[</span>endY<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>endX<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-3055 - Python","date":"March 05, 2021"}}},"pageContext":{"slug":"/Algorithm/BOJ-3055-Python/","previous":{"fields":{"slug":"/Algorithm/BOJ-4803-Python/"},"frontmatter":{"title":"BOJ-4803 - Python","category":"Algorithm","draft":false}},"next":{"fields":{"slug":"/Algorithm/프로그래머스-정수삼각형-Python/"},"frontmatter":{"title":"프로그래머스-정수삼각형 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}