{
    "componentChunkName": "component---src-templates-blog-template-js",
    "path": "/pg-81301/",
    "result": {"data":{"cur":{"id":"d6eb1379-42b3-5d7a-804f-13d5e27fec31","html":"<h2 id=\"2021-카카오-채용연계형-인턴십\" style=\"position:relative;\"><a href=\"#2021-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%B1%84%EC%9A%A9%EC%97%B0%EA%B3%84%ED%98%95-%EC%9D%B8%ED%84%B4%EC%8B%AD\" aria-label=\"2021 카카오 채용연계형 인턴십 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>[2021 카카오 채용연계형 인턴십]</h2>\n<h2 id=\"문제\" style=\"position:relative;\"><a href=\"#%EB%AC%B8%EC%A0%9C\" aria-label=\"문제 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>문제</h2>\n<p><a href=\"https://programmers.co.kr/learn/courses/30/lessons/81301\">https://programmers.co.kr/learn/courses/30/lessons/81301</a></p>\n<p>네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.</p>\n<p>다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.</p>\n<ul>\n<li>1478 → “one4seveneight”</li>\n<li>234567 → “23four5six7”</li>\n<li>10203 → “1zerotwozero3”</li>\n</ul>\n<p>이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 <code class=\"language-text\">s</code>가 매개변수로 주어집니다. <code class=\"language-text\">s</code>가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.</p>\n<p>참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.</p>\n<table>\n<thead>\n<tr>\n<th>숫자</th>\n<th>영단어</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0</td>\n<td>zero</td>\n</tr>\n<tr>\n<td>1</td>\n<td>one</td>\n</tr>\n<tr>\n<td>2</td>\n<td>two</td>\n</tr>\n<tr>\n<td>3</td>\n<td>three</td>\n</tr>\n<tr>\n<td>4</td>\n<td>four</td>\n</tr>\n<tr>\n<td>5</td>\n<td>five</td>\n</tr>\n<tr>\n<td>6</td>\n<td>six</td>\n</tr>\n<tr>\n<td>7</td>\n<td>seven</td>\n</tr>\n<tr>\n<td>8</td>\n<td>eight</td>\n</tr>\n<tr>\n<td>9</td>\n<td>nine</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2 id=\"제한사항\" style=\"position:relative;\"><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\" aria-label=\"제한사항 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>제한사항</h2>\n<ul>\n<li>1 ≤ <code class=\"language-text\">s</code>의 길이 ≤ 50</li>\n<li><code class=\"language-text\">s</code>가 “zero” 또는 “0”으로 시작하는 경우는 주어지지 않습니다.</li>\n<li>return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 <code class=\"language-text\">s</code>로 주어집니다.</li>\n</ul>\n<hr>\n<h2 id=\"입출력-예\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\" aria-label=\"입출력 예 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>입출력 예</h2>\n<table>\n<thead>\n<tr>\n<th>s</th>\n<th>result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>“one4seveneight”</td>\n<td>1478</td>\n</tr>\n<tr>\n<td>“23four5six7”</td>\n<td>234567</td>\n</tr>\n<tr>\n<td>“2three45sixseven”</td>\n<td>234567</td>\n</tr>\n<tr>\n<td>“123”</td>\n<td>123</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2 id=\"-algorithm\" style=\"position:relative;\"><a href=\"#-algorithm\" aria-label=\" algorithm permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>🔍 Algorithm</h2>\n<p><strong>문자열</strong></p>\n<h2 id=\"-logic\" style=\"position:relative;\"><a href=\"#-logic\" aria-label=\" logic permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>💻 Logic</h2>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># 문자열 s에서 글자 하나씩 분석</span>\n    <span class=\"token keyword\">for</span> c <span class=\"token keyword\">in</span> s<span class=\"token punctuation\">:</span>\n        <span class=\"token comment\"># 숫자인 경우</span>\n        <span class=\"token keyword\">if</span> c<span class=\"token punctuation\">.</span>isdigit<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            answer <span class=\"token operator\">*=</span> <span class=\"token number\">10</span>\n            answer <span class=\"token operator\">+=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 숫자가 아닌 경우</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            word <span class=\"token operator\">+=</span> c\n        <span class=\"token comment\"># word가 완성된 경우</span>\n        <span class=\"token keyword\">if</span> word <span class=\"token keyword\">in</span> number<span class=\"token punctuation\">:</span>\n            answer <span class=\"token operator\">*=</span> <span class=\"token number\">10</span>\n            answer <span class=\"token operator\">+=</span> number<span class=\"token punctuation\">.</span>index<span class=\"token punctuation\">(</span>word<span class=\"token punctuation\">)</span>\n            word <span class=\"token operator\">=</span> <span class=\"token string\">''</span>\n    <span class=\"token keyword\">return</span> answer</code></pre></div>\n<ul>\n<li><strong>숫자인 경우 or 아닌 경우</strong><br>\n숫자인 경우에는 기존 <code class=\"language-text\">answer</code> 값에 <strong>10</strong>을 곱하고, 문자 <code class=\"language-text\">c</code>를 <strong>int</strong>로 변환해서 더해준다.<br>\n숫자가 아닌 경우에는 <code class=\"language-text\">word</code> 문자열에 문자 <code class=\"language-text\">c</code>를 더해준다.</li>\n<li><strong>word가 완성된 경우</strong><br>\n<code class=\"language-text\">word</code>가 <code class=\"language-text\">number</code> 리스트에 있는 경우에는<br>\n기존 <code class=\"language-text\">answer</code> 값에 <strong>10</strong>을 곱하고, <code class=\"language-text\">number</code> 리스트에서 <code class=\"language-text\">word</code> 값에 해당하는 인덱스 값을 더해준다.</li>\n</ul>\n<hr>\n<h2 id=\"-code\" style=\"position:relative;\"><a href=\"#-code\" aria-label=\" code permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>🧩 Code</h2>\n<details><summary>전체 코드 확인</summary>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">solution</span><span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    answer<span class=\"token punctuation\">,</span> word <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token string\">''</span>\n    number <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'zero'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'one'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'two'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'three'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'four'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'five'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'six'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'seven'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'eight'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'nine'</span><span class=\"token punctuation\">]</span>\n    <span class=\"token comment\"># 문자열 s에서 글자 하나씩 분석</span>\n    <span class=\"token keyword\">for</span> c <span class=\"token keyword\">in</span> s<span class=\"token punctuation\">:</span>\n        <span class=\"token comment\"># 숫자인 경우</span>\n        <span class=\"token keyword\">if</span> c<span class=\"token punctuation\">.</span>isdigit<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            answer <span class=\"token operator\">*=</span> <span class=\"token number\">10</span>\n            answer <span class=\"token operator\">+=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 숫자가 아닌 경우</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            word <span class=\"token operator\">+=</span> c\n        <span class=\"token comment\"># word가 완성된 경우</span>\n        <span class=\"token keyword\">if</span> word <span class=\"token keyword\">in</span> number<span class=\"token punctuation\">:</span>\n            answer <span class=\"token operator\">*=</span> <span class=\"token number\">10</span>\n            answer <span class=\"token operator\">+=</span> number<span class=\"token punctuation\">.</span>index<span class=\"token punctuation\">(</span>word<span class=\"token punctuation\">)</span>\n            word <span class=\"token operator\">=</span> <span class=\"token string\">''</span>\n    <span class=\"token keyword\">return</span> answer</code></pre></div>\n</details>\n<hr>\n<h2 id=\"-review\" style=\"position:relative;\"><a href=\"#-review\" aria-label=\" review permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>📝 Review</h2>\n<p>1번 문제다운 간단한 문자열 문제였다.</p>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#2021-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%B1%84%EC%9A%A9%EC%97%B0%EA%B3%84%ED%98%95-%EC%9D%B8%ED%84%B4%EC%8B%AD\">[2021 카카오 채용연계형 인턴십]</a></li>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\">제한사항</a></li>\n<li><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\">입출력 예</a></li>\n<li><a href=\"#-algorithm\">🔍 Algorithm</a></li>\n<li><a href=\"#-logic\">💻 Logic</a></li>\n<li><a href=\"#-code\">🧩 Code</a></li>\n<li><a href=\"#-review\">📝 Review</a></li>\n</ul>\n</div>","excerpt":"[2021 카카오 채용연계형 인턴십] 문제 https://programmers.co.kr/learn/courses/30/lessons/81301 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → “one4seveneight” 234567 → “23four5six7” 10203 → “1zerotwozero3” 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 가 매개변수로 주어집니다. 가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요. 참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다. 숫자 영단어 0 zero 1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 9 nine 제한사항 1 …","frontmatter":{"date":"May 09, 2022","title":"[Programmers] 81301번: 숫자 문자열과 영단어 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/pg-81301/"}},"next":{"id":"4f472c1c-d4dc-5677-afd1-ad7d6aecfdc3","html":"<h2 id=\"2020-카카오-인턴십\" style=\"position:relative;\"><a href=\"#2020-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%9D%B8%ED%84%B4%EC%8B%AD\" aria-label=\"2020 카카오 인턴십 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>[2020 카카오 인턴십]</h2>\n<h2 id=\"문제\" style=\"position:relative;\"><a href=\"#%EB%AC%B8%EC%A0%9C\" aria-label=\"문제 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>문제</h2>\n<p><a href=\"https://programmers.co.kr/learn/courses/30/lessons/67260\">https://programmers.co.kr/learn/courses/30/lessons/67260</a></p>\n<p>[본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.]</p>\n<p>오지 탐험가인 프로도는 탐험 도중 n개의 방으로 이루어진 지하 동굴을 탐험하게 되었습니다. 모든 방에는 0부터 n - 1 까지 번호가 붙어있고, 이 동굴에 들어갈 수 있는 유일한 입구는 0번 방과 연결되어 있습니다. 각 방들은 양방향으로 통행이 가능한 통로로 서로 연결되어 있는데, 서로 다른 두 방을 직접 연결하는 통로는 오직 하나입니다. 임의의 서로 다른 두 방 사이의 최단경로는 딱 한 가지만 있으며, 또한 임의의 두 방 사이에 이동이 불가능한 경우는 없습니다.</p>\n<p>탐험에 앞서 이 지하 동굴의 지도를 손에 넣은 프로도는 다음과 같이 탐험 계획을 세웠습니다.</p>\n<ol>\n<li>모든 방을 적어도 한 번은 방문해야 합니다.</li>\n<li>특정 방은 방문하기 전에 반드시 먼저 방문할 방이 정해져 있습니다.<br>\n2-1. 이는 A번 방은 방문하기 전에 반드시 B번 방을 먼저 방문해야 한다는 의미입니다.<br>\n2-2. 어떤 방을 방문하기 위해 반드시 먼저 방문해야 하는 방은 없거나 또는 1개 입니다.<br>\n2-3. 서로 다른 두 개 이상의 방에 대해 먼저 방문해야 하는 방이 같은 경우는 없습니다.<br>\n2-4. 어떤 방이 먼저 방문해야 하는 방이면서 동시에 나중에 방문해야 되는 방인 경우는 없습니다.</li>\n</ol>\n<p>위 계획 중 2-2, 2-3, 2-4는 순서를 지켜 방문해야 하는 두 방의 쌍이 <code class=\"language-text\">A → B</code>(A를 먼저 방문하고 B를 방문함) 형태로 유일함을 의미합니다. 즉, 프로도는 아래와 같은 형태로 방문순서가 잡히지 않도록 방문 계획을 세웠습니다.</p>\n<ul>\n<li><code class=\"language-text\">A → B, A → C</code> (방문순서 배열 order = […,[A,B],…,[A,C],…]) 형태로 A를 방문 후에 방문해야 할 방이 B와 C로 두 개 또는 그 이상인 경우</li>\n<li><code class=\"language-text\">X → A, Z → A</code> (방문순서 배열 order = […,[X,A],…,[Z,A],…]) 형태로 A를 방문하기 전에 방문해야 할 방이 X와 Z로 두 개 또는 그 이상인 경우</li>\n<li><code class=\"language-text\">A → B → C</code> (방문순서 배열 order = […,[A,B],…,[B,C],…) 형태로 B처럼 A 방문 후이면서 동시에 C 방문 전인 경우</li>\n</ul>\n<p>그리고 먼저 방문해야 할 방과 나중에 방문할 방을 반드시 연속해서 방문해야 할 필요는 없어 A방을 방문한 후 다른 방을 방문한 후 B방을 방문해도 좋습니다.</p>\n<p>방 개수 n, 동굴의 각 통로들이 연결하는 두 방의 번호가 담긴 2차원 배열 path, 프로도가 정한 방문 순서가 담긴 2차원 배열 order가 매개변수로 주어질 때, 프로도가 규칙에 맞게 모든 방을 탐험할 수 있을 지 return 하도록 solution 함수를 완성해주세요.</p>\n<hr>\n<h2 id=\"제한사항\" style=\"position:relative;\"><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\" aria-label=\"제한사항 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>제한사항</h2>\n<ul>\n<li>n은 2 이상 200,000 이하입니다.</li>\n<li>path 배열의 세로(행) 길이는 n - 1 입니다.\n<ul>\n<li>path 배열의 원소는 [방 번호 A, 방 번호 B] 형태입니다.</li>\n<li>두 방 A, B사이를 연결하는 통로를 나타냅니다.</li>\n<li>통로가 연결하는 두 방 번호가 순서없이 들어있음에 주의하세요.</li>\n</ul>\n</li>\n<li>order 배열의 세로(행) 길이는 1 이상 (n / 2) 이하입니다.\n<ul>\n<li>order 배열의 원소는 [방 번호 A, 방 번호 B] 형태입니다.</li>\n<li>A번 방을 먼저 방문한 후 B번 방을 방문해야 함을 나타냅니다.</li>\n</ul>\n</li>\n</ul>\n<hr>\n<h2 id=\"입출력-예\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\" aria-label=\"입출력 예 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>입출력 예</h2>\n<table>\n<thead>\n<tr>\n<th>n</th>\n<th>path</th>\n<th>order</th>\n<th>result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>9</td>\n<td>[[0,1],[0,3],[0,7],[8,1],[3,6],[1,2],[4,7],[7,5]]</td>\n<td>[[8,5],[6,7],[4,1]]</td>\n<td>true</td>\n</tr>\n<tr>\n<td>9</td>\n<td>[[8,1],[0,1],[1,2],[0,7],[4,7],[0,3],[7,5],[3,6]]</td>\n<td>[[4,1],[5,2]]</td>\n<td>true</td>\n</tr>\n<tr>\n<td>9</td>\n<td>[[0,1],[0,3],[0,7],[8,1],[3,6],[1,2],[4,7],[7,5]]</td>\n<td>[[4,1],[8,7],[6,5]]</td>\n<td>false</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2 id=\"-algorithm\" style=\"position:relative;\"><a href=\"#-algorithm\" aria-label=\" algorithm permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>🔍 Algorithm</h2>\n<p><strong>DFS</strong></p>\n<h2 id=\"-logic\" style=\"position:relative;\"><a href=\"#-logic\" aria-label=\" logic permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>💻 Logic</h2>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># tree 정보 입력</span>\n    <span class=\"token keyword\">for</span> a<span class=\"token punctuation\">,</span> b <span class=\"token keyword\">in</span> path<span class=\"token punctuation\">:</span>\n        tree<span class=\"token punctuation\">[</span>a<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span>\n        tree<span class=\"token punctuation\">[</span>b<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># 방문 순서 정보 입력</span>\n    <span class=\"token keyword\">for</span> a<span class=\"token punctuation\">,</span> b <span class=\"token keyword\">in</span> order<span class=\"token punctuation\">:</span>\n        <span class=\"token comment\"># 0을 나중에 방문해야 하는 경우는 존재 X</span>\n        <span class=\"token keyword\">if</span> b <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">return</span> <span class=\"token boolean\">False</span>\n        orders<span class=\"token punctuation\">[</span>b<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> a</code></pre></div>\n<ul>\n<li><code class=\"language-text\">defaultdict</code>를 이용해 기본값이 <strong>list</strong>인 <strong>dictionary</strong> 생성하고 <code class=\"language-text\">path</code> 정보 저장</li>\n<li><strong>방문 순서 정보 입력</strong><br>\n방문 순서 정보를 <code class=\"language-text\">orders</code> 리스트에 입력<br>\n이 때, <strong>0</strong>을 나중에 방문해야 하는 경우는 존재할 수 없기 때문에 <code class=\"language-text\">b</code>가 <strong>0</strong>이면 <strong>False</strong> 반환하고 종료</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># DFS 탐색</span>\n    stack<span class=\"token punctuation\">.</span>extend<span class=\"token punctuation\">(</span>tree<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">while</span> stack<span class=\"token punctuation\">:</span>\n        num <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> visited<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">continue</span>\n        <span class=\"token comment\"># 먼저 방문해야 할 방이 있지만, 방문하지 않은 경우</span>\n        <span class=\"token keyword\">if</span> orders<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span> <span class=\"token keyword\">and</span> <span class=\"token keyword\">not</span> visited<span class=\"token punctuation\">[</span>orders<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n            after<span class=\"token punctuation\">[</span>orders<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> num\n            <span class=\"token keyword\">continue</span>\n        <span class=\"token comment\"># 방문하지 않은 경우</span>\n        visited<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n        stack<span class=\"token punctuation\">.</span>extend<span class=\"token punctuation\">(</span>tree<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> after<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n            stack<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>after<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>    <span class=\"token comment\"># after 값이 있으면 append</span>\n<span class=\"token comment\"># 하나라도 방문하지 않았으면 False</span>\n    <span class=\"token keyword\">if</span> <span class=\"token boolean\">False</span> <span class=\"token keyword\">in</span> visited<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token boolean\">False</span>\n    <span class=\"token keyword\">return</span> <span class=\"token boolean\">True</span></code></pre></div>\n<ul>\n<li><strong>DFS 탐색</strong><br>\n<strong>stack</strong>을 이용해서 방문하지 않은 경우에 <strong>stack</strong>에 연결된 노드 값을 넣는 방식으로 <strong>DFS</strong> 탐색<br>\n먼저 방문해야 할 방이 있지만 방문하지 않은 경우에는 다음에 바로 방문해서 처리해주기 위해 먼저 방문해야 할 해당 <code class=\"language-text\">after</code> 값에 현재 값 저장<br>\n일반적인 경우에는 <code class=\"language-text\">visited</code> 업데이트 해주고, <strong>stack</strong>에 연결된 노드 값 <strong>extend</strong>하고, 해당 <code class=\"language-text\">after</code> 값이 있으면 그 값도 <strong>append</strong><br>\n탐색 끝난 후에, 하나라도 방문하지 않은 곳이 있으면 <strong>False</strong> 반환</li>\n</ul>\n<hr>\n<h2 id=\"-code\" style=\"position:relative;\"><a href=\"#-code\" aria-label=\" code permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>🧩 Code</h2>\n<details><summary>전체 코드 확인</summary>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> collections <span class=\"token keyword\">import</span> defaultdict\n<span class=\"token keyword\">def</span> <span class=\"token function\">solution</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">,</span> path<span class=\"token punctuation\">,</span> order<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    stack <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    tree <span class=\"token operator\">=</span> defaultdict<span class=\"token punctuation\">(</span><span class=\"token builtin\">list</span><span class=\"token punctuation\">)</span>\n    orders <span class=\"token operator\">=</span> defaultdict<span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">)</span>\n    visited <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 punctuation\">)</span><span class=\"token punctuation\">]</span>\n    after <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</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 punctuation\">)</span><span class=\"token punctuation\">]</span>\n    <span class=\"token comment\"># tree 정보 입력</span>\n    <span class=\"token keyword\">for</span> a<span class=\"token punctuation\">,</span> b <span class=\"token keyword\">in</span> path<span class=\"token punctuation\">:</span>\n        tree<span class=\"token punctuation\">[</span>a<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span>\n        tree<span class=\"token punctuation\">[</span>b<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">)</span>\n    <span class=\"token comment\"># 방문 순서 정보 입력</span>\n    <span class=\"token keyword\">for</span> a<span class=\"token punctuation\">,</span> b <span class=\"token keyword\">in</span> order<span class=\"token punctuation\">:</span>\n        <span class=\"token comment\"># 0을 나중에 방문해야 하는 경우는 존재 X</span>\n        <span class=\"token keyword\">if</span> b <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">return</span> <span class=\"token boolean\">False</span>\n        orders<span class=\"token punctuation\">[</span>b<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> a\n    <span class=\"token comment\"># DFS 탐색</span>\n    stack<span class=\"token punctuation\">.</span>extend<span class=\"token punctuation\">(</span>tree<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">while</span> stack<span class=\"token punctuation\">:</span>\n        num <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> visited<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">continue</span>\n        <span class=\"token comment\"># 먼저 방문해야 할 방이 있지만, 방문하지 않은 경우</span>\n        <span class=\"token keyword\">if</span> orders<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span> <span class=\"token keyword\">and</span> <span class=\"token keyword\">not</span> visited<span class=\"token punctuation\">[</span>orders<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n            after<span class=\"token punctuation\">[</span>orders<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> num\n            <span class=\"token keyword\">continue</span>\n        <span class=\"token comment\"># 방문하지 않은 경우</span>\n        visited<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n        stack<span class=\"token punctuation\">.</span>extend<span class=\"token punctuation\">(</span>tree<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> after<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n            stack<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>after<span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>    <span class=\"token comment\"># after 값이 있으면 append</span>\n    <span class=\"token comment\"># 하나라도 방문하지 않았으면 False</span>\n    <span class=\"token keyword\">if</span> <span class=\"token boolean\">False</span> <span class=\"token keyword\">in</span> visited<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token boolean\">False</span>\n    <span class=\"token keyword\">return</span> <span class=\"token boolean\">True</span></code></pre></div>\n</details>\n<hr>\n<h2 id=\"-review\" style=\"position:relative;\"><a href=\"#-review\" aria-label=\" review permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>📝 Review</h2>\n<p>문제를 이해하고 아이디어를 내기까지 시간이 오래걸렸다. DFS를 사용해야 한다는 것은 쉽게 알 수 있었지만, after 리스트를 만들어서 방문 우선순위를 처리하는 방법을 생각해내지 못해서 다른 사람들의 힌트를 보고 구현했다.. 그리고 30번 테스트 케이스도 계속 틀려서 이유를 몰랐는데 0을 나중에 방문해야 하는 경우는 존재할 수 없다는 것을 생각 못해서 나중에 이 부분을 처리하고 통과했다.<br>\n카카오 인턴 코테 마지막 문제답게 쉽지 않다,,</p>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#2020-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%9D%B8%ED%84%B4%EC%8B%AD\">[2020 카카오 인턴십]</a></li>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\">제한사항</a></li>\n<li><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\">입출력 예</a></li>\n<li><a href=\"#-algorithm\">🔍 Algorithm</a></li>\n<li><a href=\"#-logic\">💻 Logic</a></li>\n<li><a href=\"#-code\">🧩 Code</a></li>\n<li><a href=\"#-review\">📝 Review</a></li>\n</ul>\n</div>","frontmatter":{"date":"May 02, 2022","title":"[Programmers] 67260번: 동굴 탐험 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/pg-67260/"}},"prev":{"id":"ba3c338f-8e8f-58da-8028-1d002e8542ac","html":"<h2 id=\"2021-카카오-채용연계형-인턴십\" style=\"position:relative;\"><a href=\"#2021-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%B1%84%EC%9A%A9%EC%97%B0%EA%B3%84%ED%98%95-%EC%9D%B8%ED%84%B4%EC%8B%AD\" aria-label=\"2021 카카오 채용연계형 인턴십 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>[2021 카카오 채용연계형 인턴십]</h2>\n<h2 id=\"문제\" style=\"position:relative;\"><a href=\"#%EB%AC%B8%EC%A0%9C\" aria-label=\"문제 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>문제</h2>\n<p><a href=\"https://programmers.co.kr/learn/courses/30/lessons/81302\">https://programmers.co.kr/learn/courses/30/lessons/81302</a></p>\n<p>개발자를 희망하는 죠르디가 카카오에 면접을 보러 왔습니다.</p>\n<p>코로나 바이러스 감염 예방을 위해 응시자들은 거리를 둬서 대기를 해야하는데 개발 직군 면접인 만큼\n아래와 같은 규칙으로 대기실에 거리를 두고 앉도록 안내하고 있습니다.</p>\n<ol>\n<li>대기실은 5개이며, 각 대기실은 5x5 크기입니다.</li>\n<li>거리두기를 위하여 응시자들 끼리는 맨해튼 거리가 2 이하로 앉지 말아 주세요.</li>\n<li>단 응시자가 앉아있는 자리 사이가 파티션으로 막혀 있을 경우에는 허용합니다.</li>\n</ol>\n<p>5개의 대기실을 본 죠르디는 각 대기실에서 응시자들이 거리두기를 잘 기키고 있는지 알고 싶어졌습니다. 자리에 앉아있는 응시자들의 정보와 대기실 구조를 대기실별로 담은 2차원 문자열 배열 <code class=\"language-text\">places</code>가 매개변수로 주어집니다. 각 대기실별로 거리두기를 지키고 있으면 1을, 한 명이라도 지키지 않고 있으면 0을 배열에 담아 return 하도록 solution 함수를 완성해 주세요.</p>\n<hr>\n<h2 id=\"제한사항\" style=\"position:relative;\"><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\" aria-label=\"제한사항 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>제한사항</h2>\n<ul>\n<li><code class=\"language-text\">places</code>의 행 길이(대기실 개수) = 5\n<ul>\n<li><code class=\"language-text\">places</code>의 각 행은 하나의 대기실 구조를 나타냅니다.</li>\n</ul>\n</li>\n<li><code class=\"language-text\">places</code>의 열 길이(대기실 세로 길이) = 5</li>\n<li><code class=\"language-text\">places</code>의 원소는 <code class=\"language-text\">P</code>, <code class=\"language-text\">O</code>, <code class=\"language-text\">X</code>로 이루어진 문자열입니다.\n<ul>\n<li><code class=\"language-text\">places</code> 원소의 길이(대기실 가로 길이) = 5</li>\n<li><code class=\"language-text\">P</code>는 응시자가 앉아있는 자리를 의미합니다.</li>\n<li><code class=\"language-text\">O</code>는 빈 테이블을 의미합니다.</li>\n<li><code class=\"language-text\">X</code>는 파티션을 의미합니다.</li>\n</ul>\n</li>\n<li>입력으로 주어지는 5개 대기실의 크기는 모두 5x5 입니다.</li>\n<li>return 값 형식\n<ul>\n<li>1차원 정수 배열에 5개의 원소를 담아서 return 합니다.</li>\n<li><code class=\"language-text\">places</code>에 담겨 있는 5개 대기실의 순서대로, 거리두기 준수 여부를 차례대로 배열에 담습니다.</li>\n<li>각 대기실 별로 모든 응시자가 거리두기를 지키고 있으면 1을, 한 명이라도 지키지 않고 있으면 0을 담습니다.</li>\n</ul>\n</li>\n</ul>\n<hr>\n<h2 id=\"입출력-예\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\" aria-label=\"입출력 예 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>입출력 예</h2>\n<table>\n<thead>\n<tr>\n<th>places</th>\n<th>result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>[[“POOOP”, “OXXOX”, “OPXPX”, “OOXOX”, “POXXP”], [“POOPX”, “OXPXP”, “PXXXO”, “OXXXO”, “OOOPP”], [“PXOPX”, “OXOXP”, “OXPOX”, “OXXOP”, “PXPOX”], [“OOOXX”, “XOOOX”, “OOOXX”, “OXOOX”, “OOOOO”], [“PXPXP”, “XPXPX”, “PXPXP”, “XPXPX”, “PXPXP”]]</td>\n<td>[1, 0, 1, 1, 1]</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2 id=\"-algorithm\" style=\"position:relative;\"><a href=\"#-algorithm\" aria-label=\" algorithm permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>🔍 Algorithm</h2>\n<p><strong>DFS</strong></p>\n<h2 id=\"-logic\" style=\"position:relative;\"><a href=\"#-logic\" aria-label=\" logic permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>💻 Logic</h2>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># 강의실마다 확인</span>\n    <span class=\"token keyword\">for</span> place <span class=\"token keyword\">in</span> places<span class=\"token punctuation\">:</span>\n        check <span class=\"token operator\">=</span> <span class=\"token boolean\">True</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\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                <span class=\"token comment\"># 사람이 있는 경우에만 탐색하고, 반환값 체크</span>\n                <span class=\"token keyword\">if</span> place<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'P'</span> <span class=\"token keyword\">and</span> <span class=\"token keyword\">not</span> search<span class=\"token punctuation\">(</span>place<span class=\"token punctuation\">,</span> j<span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                    check <span class=\"token operator\">=</span> <span class=\"token boolean\">False</span>\n        <span class=\"token comment\"># check에 따라 값 입력</span>\n        <span class=\"token keyword\">if</span> check<span class=\"token punctuation\">:</span> answer<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span> answer<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> answer</code></pre></div>\n<ul>\n<li><strong>강의실마다 거리두기 확인</strong><br>\n사람이 있는 경우에만 <code class=\"language-text\">search()</code> 함수로 탐색하고, 반환값이 <strong>False</strong>면 <code class=\"language-text\">check</code>도 <strong>False</strong>로 저장<br>\n전부 탐색 끝난 후에 <code class=\"language-text\">check</code> 값에 따라 <code class=\"language-text\">answer</code>에 거리두기 여부 <strong>append</strong></li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">search</span><span class=\"token punctuation\">(</span>place<span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    stack <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    visited <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</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><span class=\"token number\">5</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><span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    dx <span class=\"token operator\">=</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 operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    dy <span class=\"token operator\">=</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 number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    visited<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 boolean\">True</span>\n    <span class=\"token comment\"># DFS 탐색</span>\n    <span class=\"token keyword\">while</span> stack<span class=\"token punctuation\">:</span>\n        x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> d <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> d <span class=\"token operator\">==</span> <span class=\"token number\">2</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">continue</span>     <span class=\"token comment\"># 깊이 2까지만</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\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            next_x<span class=\"token punctuation\">,</span> next_y <span class=\"token operator\">=</span> x <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> y <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\n            <span class=\"token keyword\">if</span> next_x <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span> <span class=\"token keyword\">or</span> next_x <span class=\"token operator\">>=</span> <span class=\"token number\">5</span> <span class=\"token keyword\">or</span> next_y <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span> <span class=\"token keyword\">or</span> next_y <span class=\"token operator\">>=</span> <span class=\"token number\">5</span> <span class=\"token keyword\">or</span> visited<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">continue</span>\n            <span class=\"token keyword\">if</span> place<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"P\"</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">return</span> <span class=\"token boolean\">False</span>\n            <span class=\"token keyword\">if</span> place<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"O\"</span><span class=\"token punctuation\">:</span> stack<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>next_x<span class=\"token punctuation\">,</span> next_y<span class=\"token punctuation\">,</span> d<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\">return</span> <span class=\"token boolean\">True</span></code></pre></div>\n<ul>\n<li><strong>DFS 탐색 함수</strong><br>\n<strong>DFS</strong>로 탐색하면서 <code class=\"language-text\">P</code>를 만나면 <strong>False</strong> 반환 / <code class=\"language-text\">O</code>를 만나면 <code class=\"language-text\">stack</code>에 <strong>append</strong>해서 탐색 계속 <em><strong>(깊이 2까지만)</strong></em><br>\n시작 좌표 <code class=\"language-text\">x, y</code> 의 <code class=\"language-text\">visited</code> 값을 <strong>True</strong>로 지정하고 예외 처리</li>\n</ul>\n<hr>\n<h2 id=\"-code\" style=\"position:relative;\"><a href=\"#-code\" aria-label=\" code permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>🧩 Code</h2>\n<details><summary>전체 코드 확인</summary>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">search</span><span class=\"token punctuation\">(</span>place<span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    stack <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    visited <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</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><span class=\"token number\">5</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><span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    dx <span class=\"token operator\">=</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 operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    dy <span class=\"token operator\">=</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 number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    visited<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 boolean\">True</span>\n    <span class=\"token comment\"># DFS 탐색</span>\n    <span class=\"token keyword\">while</span> stack<span class=\"token punctuation\">:</span>\n        x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> d <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> d <span class=\"token operator\">==</span> <span class=\"token number\">2</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">continue</span>     <span class=\"token comment\"># 깊이 2까지만</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\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            next_x<span class=\"token punctuation\">,</span> next_y <span class=\"token operator\">=</span> x <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> y <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\n            <span class=\"token keyword\">if</span> next_x <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span> <span class=\"token keyword\">or</span> next_x <span class=\"token operator\">>=</span> <span class=\"token number\">5</span> <span class=\"token keyword\">or</span> next_y <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span> <span class=\"token keyword\">or</span> next_y <span class=\"token operator\">>=</span> <span class=\"token number\">5</span> <span class=\"token keyword\">or</span> visited<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">continue</span>\n            <span class=\"token keyword\">if</span> place<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"P\"</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">return</span> <span class=\"token boolean\">False</span>\n            <span class=\"token keyword\">if</span> place<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"O\"</span><span class=\"token punctuation\">:</span> stack<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>next_x<span class=\"token punctuation\">,</span> next_y<span class=\"token punctuation\">,</span> d<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\">return</span> <span class=\"token boolean\">True</span>\n            \n<span class=\"token keyword\">def</span> <span class=\"token function\">solution</span><span class=\"token punctuation\">(</span>places<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    answer <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token comment\"># 강의실마다 확인</span>\n    <span class=\"token keyword\">for</span> place <span class=\"token keyword\">in</span> places<span class=\"token punctuation\">:</span>\n        check <span class=\"token operator\">=</span> <span class=\"token boolean\">True</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\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                <span class=\"token comment\"># 사람이 있는 경우에만 탐색하고, 반환값 체크</span>\n                <span class=\"token keyword\">if</span> place<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'P'</span> <span class=\"token keyword\">and</span> <span class=\"token keyword\">not</span> search<span class=\"token punctuation\">(</span>place<span class=\"token punctuation\">,</span> j<span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                    check <span class=\"token operator\">=</span> <span class=\"token boolean\">False</span>\n        <span class=\"token comment\"># check에 따라 값 입력</span>\n        <span class=\"token keyword\">if</span> check<span class=\"token punctuation\">:</span> answer<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span> answer<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> answer</code></pre></div>\n</details>\n<hr>\n<h2 id=\"-review\" style=\"position:relative;\"><a href=\"#-review\" aria-label=\" review permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>📝 Review</h2>\n<p>DFS로 깊이 2까지만 탐색하면 되는 문제.<br>\n코드가 예쁘지는 않지만 코테 대비해서 최대한 빠르게 풀려고 했는데 걸린 시간은 만족!</p>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#2021-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%B1%84%EC%9A%A9%EC%97%B0%EA%B3%84%ED%98%95-%EC%9D%B8%ED%84%B4%EC%8B%AD\">[2021 카카오 채용연계형 인턴십]</a></li>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\">제한사항</a></li>\n<li><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\">입출력 예</a></li>\n<li><a href=\"#-algorithm\">🔍 Algorithm</a></li>\n<li><a href=\"#-logic\">💻 Logic</a></li>\n<li><a href=\"#-code\">🧩 Code</a></li>\n<li><a href=\"#-review\">📝 Review</a></li>\n</ul>\n</div>","frontmatter":{"date":"May 09, 2022","title":"[Programmers] 81302번: 거리두기 확인하기 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/pg-81302/"}},"site":{"siteMetadata":{"siteUrl":"https://jfelog.netlify.app","comments":{"utterances":{"repo":"Go-Jaecheol/Jfe_Blog"}}}}},"pageContext":{"slug":"/pg-81301/","nextSlug":"/pg-67260/","prevSlug":"/pg-81302/"}},
    "staticQueryHashes": ["1073350324","1956554647","2938748437"]}