{
    "componentChunkName": "component---src-templates-blog-template-js",
    "path": "/boj-3190/",
    "result": {"data":{"cur":{"id":"6e523823-7489-5bbe-b756-5867e5376888","html":"<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://www.acmicpc.net/problem/3190\">https://www.acmicpc.net/problem/3190</a></p>\n<p>‘Dummy’ 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다.</p>\n<p>게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다.</p>\n<p>뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다.<br>\n- 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다.<br>\n- 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다.<br>\n- 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는다.</p>\n<p>사과의 위치와 뱀의 이동경로가 주어질 때 이 게임이 몇 초에 끝나는지 계산하라.</p>\n<hr>\n<h2 id=\"입력\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EB%A0%A5\" 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>첫째 줄에 보드의 크기 N이 주어진다. (2 ≤ N ≤ 100) 다음 줄에 사과의 개수 K가 주어진다. (0 ≤ K ≤ 100)</p>\n<p>다음 K개의 줄에는 사과의 위치가 주어지는데, 첫 번째 정수는 행, 두 번째 정수는 열 위치를 의미한다. 사과의 위치는 모두 다르며, 맨 위 맨 좌측 (1행 1열) 에는 사과가 없다.</p>\n<p>다음 줄에는 뱀의 방향 변환 횟수 L 이 주어진다. (1 ≤ L ≤ 100)</p>\n<p>다음 L개의 줄에는 뱀의 방향 변환 정보가 주어지는데,  정수 X와 문자 C로 이루어져 있으며. 게임 시작 시간으로부터 X초가 끝난 뒤에 왼쪽(C가 ‘L’) 또는 오른쪽(C가 ‘D’)로 90도 방향을 회전시킨다는 뜻이다. X는 10,000 이하의 양의 정수이며, 방향 전환 정보는 X가 증가하는 순으로 주어진다.</p>\n<hr>\n<h2 id=\"출력\" style=\"position:relative;\"><a href=\"#%EC%B6%9C%EB%A0%A5\" 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>첫째 줄에 게임이 몇 초에 끝나는지 출력한다.</p>\n<hr>\n<p><strong>예제 입력 1</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">6</span>\n<span class=\"token number\">3</span>\n<span class=\"token number\">3</span> <span class=\"token number\">4</span>\n<span class=\"token number\">2</span> <span class=\"token number\">5</span>\n<span class=\"token number\">5</span> <span class=\"token number\">3</span>\n<span class=\"token number\">3</span>\n<span class=\"token number\">3</span> D\n<span class=\"token number\">15</span> L\n<span class=\"token number\">17</span> D</code></pre></div>\n<p><strong>예제 출력 1</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">9</span></code></pre></div>\n<p><strong>예제 입력 2</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">10</span>\n<span class=\"token number\">4</span>\n<span class=\"token number\">1</span> <span class=\"token number\">2</span>\n<span class=\"token number\">1</span> <span class=\"token number\">3</span>\n<span class=\"token number\">1</span> <span class=\"token number\">4</span>\n<span class=\"token number\">1</span> <span class=\"token number\">5</span>\n<span class=\"token number\">4</span>\n<span class=\"token number\">8</span> D\n<span class=\"token number\">10</span> D\n<span class=\"token number\">11</span> D\n<span class=\"token number\">13</span> L</code></pre></div>\n<p><strong>예제 출력 2</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">21</span></code></pre></div>\n<p><strong>예제 입력 3</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">10</span>\n<span class=\"token number\">5</span>\n<span class=\"token number\">1</span> <span class=\"token number\">5</span>\n<span class=\"token number\">1</span> <span class=\"token number\">3</span>\n<span class=\"token number\">1</span> <span class=\"token number\">2</span>\n<span class=\"token number\">1</span> <span class=\"token number\">6</span>\n<span class=\"token number\">1</span> <span class=\"token number\">7</span>\n<span class=\"token number\">4</span>\n<span class=\"token number\">8</span> D\n<span class=\"token number\">10</span> D\n<span class=\"token number\">11</span> D\n<span class=\"token number\">13</span> L</code></pre></div>\n<p><strong>예제 출력 3</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">13</span></code></pre></div>\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\">direction_info <span class=\"token operator\">=</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>L<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    X<span class=\"token punctuation\">,</span> C <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<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>\n    direction_info<span class=\"token punctuation\">[</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>X<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> C\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>move<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li><strong>방향 변환 정보 저장 후, move 함수 실행 및 결과 출력</strong><br>\n<strong>딕셔너리</strong>를 이용해서 <strong>key-value</strong> 값으로 시간-방향을 저장<br>\n처음 위치인 <strong>1,1</strong>에서 <code class=\"language-text\">move</code> 함수 실행 후, <strong>return</strong> 값 출력</li>\n</ul>\n<hr>\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\">move</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    time <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n    cur_dir <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n    q <span class=\"token operator\">=</span> deque<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    q<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">while</span> q<span class=\"token punctuation\">:</span>\n        time <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n        r<span class=\"token punctuation\">,</span> c <span class=\"token operator\">=</span> q<span class=\"token punctuation\">.</span>popleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 다음 위치 계산</span>\n        next_c <span class=\"token operator\">=</span> c <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>cur_dir<span class=\"token punctuation\">]</span>\n        next_r <span class=\"token operator\">=</span> r <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>cur_dir<span class=\"token punctuation\">]</span>\n        q<span class=\"token punctuation\">.</span>appendleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n        <span class=\"token comment\"># 벽에 부딪히는지 체크</span>\n        <span class=\"token keyword\">if</span> next_r <span class=\"token operator\">&lt;</span> <span class=\"token number\">1</span> <span class=\"token keyword\">or</span> next_r <span class=\"token operator\">></span> N <span class=\"token keyword\">or</span> next_c <span class=\"token operator\">&lt;</span> <span class=\"token number\">1</span> <span class=\"token keyword\">or</span> next_c <span class=\"token operator\">></span> N <span class=\"token punctuation\">:</span> <span class=\"token keyword\">return</span> time\n        <span class=\"token comment\"># 자기 자신과 부딪히는지 체크</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>next_r<span class=\"token punctuation\">,</span> next_c<span class=\"token punctuation\">)</span> <span class=\"token keyword\">in</span> q <span class=\"token punctuation\">:</span> <span class=\"token keyword\">return</span> time\n        <span class=\"token comment\"># 이동</span>\n        q<span class=\"token punctuation\">.</span>appendleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>next_r<span class=\"token punctuation\">,</span> next_c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">[</span>next_r<span class=\"token punctuation\">,</span> next_c<span class=\"token punctuation\">]</span> <span class=\"token keyword\">in</span> apple <span class=\"token punctuation\">:</span> apple<span class=\"token punctuation\">.</span>remove<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>next_r<span class=\"token punctuation\">,</span> next_c<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">else</span> <span class=\"token punctuation\">:</span> q<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 방향 변환</span>\n        <span class=\"token keyword\">if</span> time <span class=\"token keyword\">in</span> direction_info<span class=\"token punctuation\">.</span>keys<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> direction_info<span class=\"token punctuation\">[</span>time<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'D'</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> cur_dir <span class=\"token operator\">==</span> <span class=\"token number\">3</span> <span class=\"token punctuation\">:</span> cur_dir <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n                <span class=\"token keyword\">else</span> <span class=\"token punctuation\">:</span> cur_dir <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n            <span class=\"token keyword\">elif</span> direction_info<span class=\"token punctuation\">[</span>time<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'L'</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> cur_dir <span class=\"token operator\">==</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">:</span> cur_dir <span class=\"token operator\">=</span> <span class=\"token number\">3</span>\n                <span class=\"token keyword\">else</span> <span class=\"token punctuation\">:</span> cur_dir <span class=\"token operator\">-=</span> <span class=\"token number\">1</span></code></pre></div>\n<ul>\n<li>제시된 조건에 맞게 뱀 위치를 이동시키고 종료되는 시간을 return하는 함수\n<ul>\n<li><strong>다음 위치 계산</strong><br>\n이전에 선언한 <code class=\"language-text\">dx = [1, 0, -1, 0]</code> <code class=\"language-text\">dy = [0, 1, 0, -1]</code> 에서<br>\n현재 방향인 <code class=\"language-text\">cur_dir</code> 을 기준으로 다음 위치 <code class=\"language-text\">next_x</code> <code class=\"language-text\">next_y</code> 를 계산</li>\n<li><strong>종료 조건 체크</strong><br>\n<strong>벽에 부딪히는지</strong> boundary 체크해서 현재 <code class=\"language-text\">time</code> 값을 <strong>return</strong><br>\n<strong>자기 자신과 부딪히는지</strong>는 다음 위치가 현재 <strong>deque</strong>에 있는지 확인하고, 있으면 <code class=\"language-text\">time</code> 값 <strong>return</strong></li>\n<li><strong>이동</strong><br>\n다음 위치를 <strong>deque</strong>의 시작 위치에 <strong>appendleft</strong>하고<br>\n그 위치가 <code class=\"language-text\">apple</code> 리스트에 있으면, 해당 값을 리스트에서 <strong>remove</strong><br>\n<code class=\"language-text\">apple</code> 리스트에 없으면, 뱀의 꼬리를 움직이기 위해 <strong>deque</strong>의 끝 위치 값을 <strong>pop</strong></li>\n<li><strong>방향 변환</strong><br>\n딕셔너리 <code class=\"language-text\">direction_info</code> 에 현재 <code class=\"language-text\">time</code>에 해당하는 <strong>key</strong>가 있으면,<br>\n그 <strong>key</strong>에 해당하는 <strong>value</strong>가 <strong>D</strong>인지 <strong>L</strong>인지에 따라 <code class=\"language-text\">cur_dir</code> 값 변경</li>\n</ul>\n</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\">import</span> sys\n<span class=\"token keyword\">from</span> collections <span class=\"token keyword\">import</span> deque\nN <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nK <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\napple <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<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><span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>K<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\nL <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\ndx <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>\ndy <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\n<span class=\"token keyword\">def</span> <span class=\"token function\">move</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    time <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n    cur_dir <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n    q <span class=\"token operator\">=</span> deque<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    q<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">while</span> q<span class=\"token punctuation\">:</span>\n        time <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n        r<span class=\"token punctuation\">,</span> c <span class=\"token operator\">=</span> q<span class=\"token punctuation\">.</span>popleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 다음 위치 계산</span>\n        next_c <span class=\"token operator\">=</span> c <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>cur_dir<span class=\"token punctuation\">]</span>\n        next_r <span class=\"token operator\">=</span> r <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>cur_dir<span class=\"token punctuation\">]</span>\n        q<span class=\"token punctuation\">.</span>appendleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n        <span class=\"token comment\"># 벽에 부딪히는지 체크</span>\n        <span class=\"token keyword\">if</span> next_r <span class=\"token operator\">&lt;</span> <span class=\"token number\">1</span> <span class=\"token keyword\">or</span> next_r <span class=\"token operator\">></span> N <span class=\"token keyword\">or</span> next_c <span class=\"token operator\">&lt;</span> <span class=\"token number\">1</span> <span class=\"token keyword\">or</span> next_c <span class=\"token operator\">></span> N <span class=\"token punctuation\">:</span> <span class=\"token keyword\">return</span> time\n        <span class=\"token comment\"># 자기 자신과 부딪히는지 체크</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>next_r<span class=\"token punctuation\">,</span> next_c<span class=\"token punctuation\">)</span> <span class=\"token keyword\">in</span> q <span class=\"token punctuation\">:</span> <span class=\"token keyword\">return</span> time\n        <span class=\"token comment\"># 이동</span>\n        q<span class=\"token punctuation\">.</span>appendleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>next_r<span class=\"token punctuation\">,</span> next_c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">[</span>next_r<span class=\"token punctuation\">,</span> next_c<span class=\"token punctuation\">]</span> <span class=\"token keyword\">in</span> apple <span class=\"token punctuation\">:</span> apple<span class=\"token punctuation\">.</span>remove<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>next_r<span class=\"token punctuation\">,</span> next_c<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">else</span> <span class=\"token punctuation\">:</span> q<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 방향 변환</span>\n        <span class=\"token keyword\">if</span> time <span class=\"token keyword\">in</span> direction_info<span class=\"token punctuation\">.</span>keys<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> direction_info<span class=\"token punctuation\">[</span>time<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'D'</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> cur_dir <span class=\"token operator\">==</span> <span class=\"token number\">3</span> <span class=\"token punctuation\">:</span> cur_dir <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n                <span class=\"token keyword\">else</span> <span class=\"token punctuation\">:</span> cur_dir <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n            <span class=\"token keyword\">elif</span> direction_info<span class=\"token punctuation\">[</span>time<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'L'</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> cur_dir <span class=\"token operator\">==</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">:</span> cur_dir <span class=\"token operator\">=</span> <span class=\"token number\">3</span>\n                <span class=\"token keyword\">else</span> <span class=\"token punctuation\">:</span> cur_dir <span class=\"token operator\">-=</span> <span class=\"token number\">1</span>\n\ndirection_info <span class=\"token operator\">=</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>L<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    X<span class=\"token punctuation\">,</span> C <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<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>\n    direction_info<span class=\"token punctuation\">[</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>X<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> C\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>move<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n</details>\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>방향 변환에 대한 정보를 저장할 때, 리스트로 저장을 하려고 했는데 너무 비효율적인 것 같아서 딕셔너리를 사용했는데 진짜 편하다,,</p>\n<p>예제 케이스 다 맞았는데 틀렸다고 나오길래 다시 보니까 사과를 지난 다음에 사과를 없애주지 않아서 그런 거였음ㅜ</p>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%9E%85%EB%A0%A5\">입력</a></li>\n<li><a href=\"#%EC%B6%9C%EB%A0%A5\">출력</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":"문제 https://www.acmicpc.net/problem/3190 ‘Dummy’ 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다. - 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다. - 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다. - 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는다. 사과의 위치와 뱀의 이동경로가 주어질 때 이 게임이 몇 초에 끝나는지 계산하라. 입력 첫째 줄에 보…","frontmatter":{"date":"December 29, 2021","title":"[BOJ] 3190번: 뱀 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/boj-3190/"}},"next":{"id":"31d416f5-d1b6-58db-9b4b-e149c36e0f61","html":"<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://www.acmicpc.net/problem/14503\">https://www.acmicpc.net/problem/14503</a></p>\n<p>로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오.</p>\n<p>로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다.</p>\n<p>로봇 청소기는 다음과 같이 작동한다.</p>\n<ol>\n<li>현재 위치를 청소한다.</li>\n<li>현재 위치에서 현재 방향을 기준으로 왼쪽 방향부터 차례대로 인접한 칸을 탐색한다.<br>\na. 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다.<br>\nb. 왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다.<br>\nc. 네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다.<br>\nd. 네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춘다.</li>\n</ol>\n<p>로봇 청소기는 이미 청소되어있는 칸을 또 청소하지 않으며, 벽을 통과할 수 없다.</p>\n<hr>\n<h2 id=\"입력\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EB%A0%A5\" 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>첫째 줄에 세로 크기 N과 가로 크기 M이 주어진다. (3 ≤ N, M ≤ 50)</p>\n<p>둘째 줄에 로봇 청소기가 있는 칸의 좌표 (r, c)와 바라보는 방향 d가 주어진다. d가 0인 경우에는 북쪽을, 1인 경우에는 동쪽을, 2인 경우에는 남쪽을, 3인 경우에는 서쪽을 바라보고 있는 것이다.</p>\n<p>셋째 줄부터 N개의 줄에 장소의 상태가 북쪽부터 남쪽 순서대로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 빈 칸은 0, 벽은 1로 주어진다. 지도의 첫 행, 마지막 행, 첫 열, 마지막 열에 있는 모든 칸은 벽이다.</p>\n<p>로봇 청소기가 있는 칸의 상태는 항상 빈 칸이다.</p>\n<hr>\n<h2 id=\"출력\" style=\"position:relative;\"><a href=\"#%EC%B6%9C%EB%A0%A5\" 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>로봇 청소기가 청소하는 칸의 개수를 출력한다.</p>\n<hr>\n<p><strong>예제 입력 1</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">3</span> <span class=\"token number\">3</span>\n<span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span>\n<span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span></code></pre></div>\n<p><strong>예제 출력 1</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">1</span></code></pre></div>\n<p><strong>예제 입력 2</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">11</span> <span class=\"token number\">10</span>\n<span class=\"token number\">7</span> <span class=\"token number\">4</span> <span class=\"token number\">0</span>\n<span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span></code></pre></div>\n<p><strong>예제 출력 2</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">57</span></code></pre></div>\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\">cur <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">,</span> r<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">while</span> cur<span class=\"token punctuation\">:</span>\n    cur_x<span class=\"token punctuation\">,</span> cur_y<span class=\"token punctuation\">,</span> d <span class=\"token operator\">=</span> cur<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> area<span class=\"token punctuation\">[</span>cur_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>cur_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n        area<span class=\"token punctuation\">[</span>cur_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>cur_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">2</span>\n        result <span class=\"token operator\">+=</span> <span class=\"token number\">1</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        <span class=\"token keyword\">if</span> d <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> d <span class=\"token operator\">=</span> <span class=\"token number\">3</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span> d <span class=\"token operator\">-=</span> <span class=\"token number\">1</span>\n        next_x <span class=\"token operator\">=</span> cur_x <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        next_y <span class=\"token operator\">=</span> cur_y <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">if</span> area<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\">&lt;=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n            cur<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 punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token keyword\">break</span>\n    <span class=\"token keyword\">if</span> i <span class=\"token operator\">==</span> <span class=\"token number\">3</span> <span class=\"token keyword\">and</span> <span class=\"token keyword\">not</span> cur<span class=\"token punctuation\">:</span>\n        next_x <span class=\"token operator\">=</span> cur_x <span class=\"token operator\">+</span> <span class=\"token operator\">-</span>dx<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        next_y <span class=\"token operator\">=</span> cur_y <span class=\"token operator\">+</span> <span class=\"token operator\">-</span>dy<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">if</span> area<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 number\">1</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">break</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            cur<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 punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li>문제에서 제시한 작동 방법에 맞춰 위치 이동\n<ul>\n<li><strong>현재 위치 청소</strong><br>\n현재 위치가 청소되지 않았으면 <code class=\"language-text\">area[cur_y][cur_x] == 0</code>,<br>\n해당 <code class=\"language-text\">area</code> 값을 <strong>2</strong>로 변경하고, <code class=\"language-text\">result</code> 값 <strong>1</strong> 증가</li>\n<li><strong>현재 방향 기준으로 왼쪽 방향부터 탐색</strong><br>\n현재 방향 <code class=\"language-text\">d</code>를 기준으로 왼쪽부터 돌아가며 4번 for문,<br>\n이 과정에서 청소하지 않은 곳이 있으면 그 곳으로 이동하기 위해 <code class=\"language-text\">cur.append((next_x, next_y, d))</code> 하고, <strong>break</strong></li>\n<li><strong>뒤로 후진하는 경우</strong><br>\nfor문을 4번 다 돌았지만 <code class=\"language-text\">cur</code>에 <strong>append</strong> 된 값이 없으면, 뒤로 후진하고 <strong>append</strong>\n<blockquote>\n<p>이 때, 후진한 위치의 <code class=\"language-text\">area</code> 값이 <strong>1</strong>이면 <strong>break</strong>하고 결과 출력</p>\n</blockquote>\n</li>\n</ul>\n</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\">import</span> sys\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> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<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>\nr<span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">,</span> d <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> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<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>\narea <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<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> <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>\ndx <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>\ndy <span class=\"token operator\">=</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 number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\nresult <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\ncur <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">,</span> r<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">while</span> cur<span class=\"token punctuation\">:</span>\n    cur_x<span class=\"token punctuation\">,</span> cur_y<span class=\"token punctuation\">,</span> d <span class=\"token operator\">=</span> cur<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> area<span class=\"token punctuation\">[</span>cur_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>cur_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n        area<span class=\"token punctuation\">[</span>cur_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>cur_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">2</span>\n        result <span class=\"token operator\">+=</span> <span class=\"token number\">1</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        <span class=\"token keyword\">if</span> d <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> d <span class=\"token operator\">=</span> <span class=\"token number\">3</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span> d <span class=\"token operator\">-=</span> <span class=\"token number\">1</span>\n        next_x <span class=\"token operator\">=</span> cur_x <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        next_y <span class=\"token operator\">=</span> cur_y <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">if</span> area<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\">&lt;=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n            cur<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 punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token keyword\">break</span>\n    <span class=\"token keyword\">if</span> i <span class=\"token operator\">==</span> <span class=\"token number\">3</span> <span class=\"token keyword\">and</span> <span class=\"token keyword\">not</span> cur<span class=\"token punctuation\">:</span>\n        next_x <span class=\"token operator\">=</span> cur_x <span class=\"token operator\">+</span> <span class=\"token operator\">-</span>dx<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        next_y <span class=\"token operator\">=</span> cur_y <span class=\"token operator\">+</span> <span class=\"token operator\">-</span>dy<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">if</span> area<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 number\">1</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">break</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            cur<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 punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span></code></pre></div>\n</details>\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>처음에는 재귀함수가 먼저 생각나서 재귀함수로 구현을 하려고 했는데 그 과정에서 코드가 너무 길어지고, 제대로 결과가 바로 안나와서 미련없이 바로 원래 익숙한 for문 형태로 바꿔서 풀었다.</p>\n<p>좌표 값을 이상하게 생각해서 쓸데없는 시간을 보내긴 했지만, 그렇게 오래 걸리지는 않은 듯</p>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%9E%85%EB%A0%A5\">입력</a></li>\n<li><a href=\"#%EC%B6%9C%EB%A0%A5\">출력</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":"December 28, 2021","title":"[BOJ] 14503번: 로봇 청소기 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/boj-14503/"}},"prev":{"id":"2f1c1534-26a4-5754-8f0e-84f31a2512ca","html":"<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://www.acmicpc.net/problem/14499\">https://www.acmicpc.net/problem/14499</a></p>\n<p>크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 이 지도의 위에 주사위가 하나 놓여져 있으며, 주사위의 전개도는 아래와 같다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">  <span class=\"token number\">2</span>\n<span class=\"token number\">4</span> <span class=\"token number\">1</span> <span class=\"token number\">3</span>\n  <span class=\"token number\">5</span>\n  <span class=\"token number\">6</span></code></pre></div>\n<p>주사위는 지도 위에 윗 면이 1이고, 동쪽을 바라보는 방향이 3인 상태로 놓여져 있으며, 놓여져 있는 곳의 좌표는 (x, y) 이다. 가장 처음에 주사위에는 모든 면에 0이 적혀져 있다.</p>\n<p>지도의 각 칸에는 정수가 하나씩 쓰여져 있다. 주사위를 굴렸을 때, 이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다. 0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며, 칸에 쓰여 있는 수는 0이 된다.</p>\n<p>주사위를 놓은 곳의 좌표와 이동시키는 명령이 주어졌을 때, 주사위가 이동했을 때 마다 상단에 쓰여 있는 값을 구하는 프로그램을 작성하시오.</p>\n<p>주사위는 지도의 바깥으로 이동시킬 수 없다. 만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도 하면 안 된다.</p>\n<hr>\n<h2 id=\"입력\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EB%A0%A5\" 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>첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다.</p>\n<p>둘째 줄부터 N개의 줄에 지도에 쓰여 있는 수가 북쪽부터 남쪽으로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 주사위를 놓은 칸에 쓰여 있는 수는 항상 0이다. 지도의 각 칸에 쓰여 있는 수는 10 미만의 자연수 또는 0이다.</p>\n<p>마지막 줄에는 이동하는 명령이 순서대로 주어진다. 동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4로 주어진다.</p>\n<hr>\n<h2 id=\"출력\" style=\"position:relative;\"><a href=\"#%EC%B6%9C%EB%A0%A5\" 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>이동할 때마다 주사위의 윗 면에 쓰여 있는 수를 출력한다. 만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도 하면 안 된다.</p>\n<hr>\n<p><strong>예제 입력 1</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">4</span> <span class=\"token number\">2</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">8</span>\n<span class=\"token number\">0</span> <span class=\"token number\">2</span>\n<span class=\"token number\">3</span> <span class=\"token number\">4</span>\n<span class=\"token number\">5</span> <span class=\"token number\">6</span>\n<span class=\"token number\">7</span> <span class=\"token number\">8</span>\n<span class=\"token number\">4</span> <span class=\"token number\">4</span> <span class=\"token number\">4</span> <span class=\"token number\">1</span> <span class=\"token number\">3</span> <span class=\"token number\">3</span> <span class=\"token number\">3</span> <span class=\"token number\">2</span></code></pre></div>\n<p><strong>예제 출력 1</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">0</span></code></pre></div>\n<p><strong>예제 입력 2</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">3</span> <span class=\"token number\">3</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">9</span>\n<span class=\"token number\">1</span> <span class=\"token number\">2</span> <span class=\"token number\">3</span>\n<span class=\"token number\">4</span> <span class=\"token number\">0</span> <span class=\"token number\">5</span>\n<span class=\"token number\">6</span> <span class=\"token number\">7</span> <span class=\"token number\">8</span>\n<span class=\"token number\">1</span> <span class=\"token number\">3</span> <span class=\"token number\">2</span> <span class=\"token number\">2</span> <span class=\"token number\">4</span> <span class=\"token number\">4</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">3</span></code></pre></div>\n<p><strong>예제 출력 2</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">0</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">3</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">1</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">6</span>\n<span class=\"token number\">0</span></code></pre></div>\n<p><strong>예제 입력 3</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">2</span> <span class=\"token number\">2</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">16</span>\n<span class=\"token number\">0</span> <span class=\"token number\">2</span>\n<span class=\"token number\">3</span> <span class=\"token number\">4</span>\n<span class=\"token number\">4</span> <span class=\"token number\">4</span> <span class=\"token number\">4</span> <span class=\"token number\">4</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">3</span> <span class=\"token number\">3</span> <span class=\"token number\">3</span> <span class=\"token number\">3</span> <span class=\"token number\">2</span> <span class=\"token number\">2</span> <span class=\"token number\">2</span> <span class=\"token number\">2</span></code></pre></div>\n<p><strong>예제 출력 3</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">0</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">0</span></code></pre></div>\n<p><strong>예제 입력 4</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">3</span> <span class=\"token number\">3</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">16</span>\n<span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">2</span>\n<span class=\"token number\">3</span> <span class=\"token number\">4</span> <span class=\"token number\">5</span>\n<span class=\"token number\">6</span> <span class=\"token number\">7</span> <span class=\"token number\">8</span>\n<span class=\"token number\">4</span> <span class=\"token number\">4</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">3</span> <span class=\"token number\">3</span> <span class=\"token number\">2</span> <span class=\"token number\">2</span> <span class=\"token number\">4</span> <span class=\"token number\">4</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">3</span> <span class=\"token number\">3</span> <span class=\"token number\">2</span> <span class=\"token number\">2</span></code></pre></div>\n<p><strong>예제 출력 4</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">0</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">6</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">8</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">2</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">8</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">2</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">8</span>\n<span class=\"token number\">0</span>\n<span class=\"token number\">2</span></code></pre></div>\n<hr>\n<h1 id=\"14499-주사위-굴리기---python\" style=\"position:relative;\"><a href=\"#14499-%EC%A3%BC%EC%82%AC%EC%9C%84-%EA%B5%B4%EB%A6%AC%EA%B8%B0---python\" aria-label=\"14499 주사위 굴리기   python 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>[14499] 주사위 굴리기 - Python</h1>\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 keyword\">class</span> <span class=\"token class-name\">Dice</span><span class=\"token punctuation\">:</span>\n    top<span class=\"token punctuation\">,</span> front<span class=\"token punctuation\">,</span> right<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> back<span class=\"token punctuation\">,</span> bottom <span class=\"token operator\">=</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\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span>\n    value <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</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\">6</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">def</span> <span class=\"token function\">move_dice</span><span class=\"token punctuation\">(</span>self<span class=\"token punctuation\">,</span> d<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\">1</span><span class=\"token punctuation\">:</span>\n            temp <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>top\n            self<span class=\"token punctuation\">.</span>top <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>left\n            self<span class=\"token punctuation\">.</span>left <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>bottom\n            self<span class=\"token punctuation\">.</span>bottom <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>right\n            self<span class=\"token punctuation\">.</span>right <span class=\"token operator\">=</span> temp\n        <span class=\"token keyword\">elif</span> d <span class=\"token operator\">==</span> <span class=\"token number\">2</span><span class=\"token punctuation\">:</span>\n            temp <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>top\n            self<span class=\"token punctuation\">.</span>top <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>right\n            self<span class=\"token punctuation\">.</span>right <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>bottom\n            self<span class=\"token punctuation\">.</span>bottom <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>left\n            self<span class=\"token punctuation\">.</span>left <span class=\"token operator\">=</span> temp\n        <span class=\"token keyword\">elif</span> d <span class=\"token operator\">==</span> <span class=\"token number\">3</span><span class=\"token punctuation\">:</span>\n            temp <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>top\n            self<span class=\"token punctuation\">.</span>top <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>back\n            self<span class=\"token punctuation\">.</span>back <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>bottom\n            self<span class=\"token punctuation\">.</span>bottom <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>front\n            self<span class=\"token punctuation\">.</span>front <span class=\"token operator\">=</span> temp\n        <span class=\"token keyword\">elif</span> d <span class=\"token operator\">==</span> <span class=\"token number\">4</span><span class=\"token punctuation\">:</span>\n            temp <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>top\n            self<span class=\"token punctuation\">.</span>top <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>front\n            self<span class=\"token punctuation\">.</span>front <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>bottom\n            self<span class=\"token punctuation\">.</span>bottom <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>back\n            self<span class=\"token punctuation\">.</span>back <span class=\"token operator\">=</span> temp</code></pre></div>\n<ul>\n<li><strong>Dice 클래스</strong>\n<ul>\n<li><strong>주사위 상태 저장</strong><br>\n전개도에 맞게 <code class=\"language-text\">top, front, right, left, back, bottom</code> 에 초기 값 저장</li>\n<li><strong>주사위에 쓰여지는 수 저장</strong><br>\n주사위의 각 면에 쓰여지는 수를 저장하기 위해 <code class=\"language-text\">value</code> 리스트 생성</li>\n<li><strong>주사위 이동시키는 메소드</strong><br>\n명령 <code class=\"language-text\">d</code>에 맞게 주사위를 이동시키는 메소드 작성</li>\n</ul>\n</li>\n</ul>\n<hr>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">dice <span class=\"token operator\">=</span> Dice<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\ncur <span class=\"token operator\">=</span> <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<span class=\"token keyword\">while</span> order<span class=\"token punctuation\">:</span>\n    d <span class=\"token operator\">=</span> order<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">del</span> order<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    cur_x<span class=\"token punctuation\">,</span> cur_y <span class=\"token operator\">=</span> cur<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token comment\"># 다음 좌표 계산</span>\n    next_x <span class=\"token operator\">=</span> cur_x <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>d<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    next_y <span class=\"token operator\">=</span> cur_y <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>d<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    <span class=\"token comment\"># boundary 체크</span>\n    <span class=\"token keyword\">if</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> next_x <span class=\"token operator\">&lt;</span> M <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> next_y <span class=\"token operator\">&lt;</span> N<span class=\"token punctuation\">:</span>\n        dice<span class=\"token punctuation\">.</span>move_dice<span class=\"token punctuation\">(</span>d<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>dice<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">[</span>dice<span class=\"token punctuation\">.</span>top<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 주사위 바닥면의 수를 복사할지, 칸에 쓰여 있는 수를 복사할지</span>\n        <span class=\"token keyword\">if</span> <span class=\"token builtin\">map</span><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 number\">0</span><span class=\"token punctuation\">:</span>\n            <span class=\"token builtin\">map</span><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> dice<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">[</span>dice<span class=\"token punctuation\">.</span>bottom<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            dice<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">[</span>dice<span class=\"token punctuation\">.</span>bottom<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">map</span><span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span>\n            <span class=\"token builtin\">map</span><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 number\">0</span>\n        cur<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><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n        cur<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>cur_x<span class=\"token punctuation\">,</span> cur_y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li>입력된 명령에 맞게 주사위 이동시키며 주사위 윗 면에 적힌 수 출력\n<ul>\n<li><strong>다음 좌표 계산</strong><br>\n<code class=\"language-text\">order</code>에서 받은 명령 <code class=\"language-text\">d</code>와 현재 위치 <code class=\"language-text\">cur</code>에서 <strong>pop</strong>한 값으로<br>\n다음 위치인 <code class=\"language-text\">next_x</code> , <code class=\"language-text\">next_y</code> 계산</li>\n<li><strong>boundary 체크</strong><br>\n<strong>boundary 안에 속할 때</strong>만 주사위를 이동하고 <code class=\"language-text\">dice.value[dice.top]</code> 값을 출력함<br>\n<strong>아닐 때</strong>는 현재 <code class=\"language-text\">cur_x</code> , <code class=\"language-text\">cur_y</code> 를 다시 <code class=\"language-text\">cur</code>에 <strong>append</strong></li>\n<li><strong>주사위 바닥면의 수를 복사할지, 칸에 쓰여 있는 수를 복사할지</strong><br>\n다음 위치 칸의 값이 <strong>0이면</strong> <code class=\"language-text\">dice.value[dice.bottom]</code> 값을 복사<br>\n<strong>0이 아니면</strong> <code class=\"language-text\">dice.value[dice.bottom]</code>에 다음 위치 칸의 값을 복사하고 <code class=\"language-text\">map[next_y][next_x] = 0</code></li>\n</ul>\n</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\">import</span> sys\nN<span class=\"token punctuation\">,</span> M<span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> K <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> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token builtin\">map</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<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><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>\norder <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<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>\ndx <span class=\"token operator\">=</span> <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\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\ndy <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\">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\">1</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Dice</span><span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># 주사위 상태</span>\n    top<span class=\"token punctuation\">,</span> front<span class=\"token punctuation\">,</span> right<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> back<span class=\"token punctuation\">,</span> bottom <span class=\"token operator\">=</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\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span>\n    <span class=\"token comment\"># 주사위에 쓰여지는 수</span>\n    value <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</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\">6</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    <span class=\"token comment\"># 주사위 이동시키는 메소드</span>\n    <span class=\"token keyword\">def</span> <span class=\"token function\">move_dice</span><span class=\"token punctuation\">(</span>self<span class=\"token punctuation\">,</span> d<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\">1</span><span class=\"token punctuation\">:</span>\n            temp <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>top\n            self<span class=\"token punctuation\">.</span>top <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>left\n            self<span class=\"token punctuation\">.</span>left <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>bottom\n            self<span class=\"token punctuation\">.</span>bottom <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>right\n            self<span class=\"token punctuation\">.</span>right <span class=\"token operator\">=</span> temp\n        <span class=\"token keyword\">elif</span> d <span class=\"token operator\">==</span> <span class=\"token number\">2</span><span class=\"token punctuation\">:</span>\n            temp <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>top\n            self<span class=\"token punctuation\">.</span>top <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>right\n            self<span class=\"token punctuation\">.</span>right <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>bottom\n            self<span class=\"token punctuation\">.</span>bottom <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>left\n            self<span class=\"token punctuation\">.</span>left <span class=\"token operator\">=</span> temp\n        <span class=\"token keyword\">elif</span> d <span class=\"token operator\">==</span> <span class=\"token number\">3</span><span class=\"token punctuation\">:</span>\n            temp <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>top\n            self<span class=\"token punctuation\">.</span>top <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>back\n            self<span class=\"token punctuation\">.</span>back <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>bottom\n            self<span class=\"token punctuation\">.</span>bottom <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>front\n            self<span class=\"token punctuation\">.</span>front <span class=\"token operator\">=</span> temp\n        <span class=\"token keyword\">elif</span> d <span class=\"token operator\">==</span> <span class=\"token number\">4</span><span class=\"token punctuation\">:</span>\n            temp <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>top\n            self<span class=\"token punctuation\">.</span>top <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>front\n            self<span class=\"token punctuation\">.</span>front <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>bottom\n            self<span class=\"token punctuation\">.</span>bottom <span class=\"token operator\">=</span> self<span class=\"token punctuation\">.</span>back\n            self<span class=\"token punctuation\">.</span>back <span class=\"token operator\">=</span> temp\n\ndice <span class=\"token operator\">=</span> Dice<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\ncur <span class=\"token operator\">=</span> <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<span class=\"token keyword\">while</span> order<span class=\"token punctuation\">:</span>\n    d <span class=\"token operator\">=</span> order<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">del</span> order<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    cur_x<span class=\"token punctuation\">,</span> cur_y <span class=\"token operator\">=</span> cur<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token comment\"># 다음 좌표 계산</span>\n    next_x <span class=\"token operator\">=</span> cur_x <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>d<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    next_y <span class=\"token operator\">=</span> cur_y <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>d<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    <span class=\"token comment\"># boundary 체크</span>\n    <span class=\"token keyword\">if</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> next_x <span class=\"token operator\">&lt;</span> M <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> next_y <span class=\"token operator\">&lt;</span> N<span class=\"token punctuation\">:</span>\n        dice<span class=\"token punctuation\">.</span>move_dice<span class=\"token punctuation\">(</span>d<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>dice<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">[</span>dice<span class=\"token punctuation\">.</span>top<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 주사위 바닥면의 수를 복사할지, 칸에 쓰여 있는 수를 복사할지</span>\n        <span class=\"token keyword\">if</span> <span class=\"token builtin\">map</span><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 number\">0</span><span class=\"token punctuation\">:</span>\n            <span class=\"token builtin\">map</span><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> dice<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">[</span>dice<span class=\"token punctuation\">.</span>bottom<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            dice<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">[</span>dice<span class=\"token punctuation\">.</span>bottom<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">map</span><span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span>\n            <span class=\"token builtin\">map</span><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 number\">0</span>\n        cur<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><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n        cur<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>cur_x<span class=\"token punctuation\">,</span> cur_y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n</details>\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>주사위를 이동시키고 출력하는 방법은 전체적으로 어렵지 않았다.<br>\n현재 주사위 상태와 각 면에 적히는 수와 명령에 따라 이동시키는 함수까지 있어야 해서 Class로 정의하면 편하겠다고 생각했고, 그래서 평소에는 안쓰던 Class를 사용했다.</p>\n<p>문제를 똑바로 정독해서 실수를 줄이자..!</p>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%9E%85%EB%A0%A5\">입력</a></li>\n<li><a href=\"#%EC%B6%9C%EB%A0%A5\">출력</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":"January 01, 2022","title":"[BOJ] 14499번: 주사위 굴리기 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/boj-14499/"}},"site":{"siteMetadata":{"siteUrl":"https://jfelog.netlify.app","comments":{"utterances":{"repo":"Go-Jaecheol/Jfe_Blog"}}}}},"pageContext":{"slug":"/boj-3190/","nextSlug":"/boj-14503/","prevSlug":"/boj-14499/"}},
    "staticQueryHashes": ["1073350324","1956554647","2938748437"]}