{
    "componentChunkName": "component---src-templates-blog-template-js",
    "path": "/boj-14503/",
    "result": {"data":{"cur":{"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>","excerpt":"문제 https://www.acmicpc.net/problem/14503 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음과 같이 작동한다. 현재 위치를 청소한다. 현재 위치에서 현재 방향을 기준으로 왼쪽 방향부터 차례대로 인접한 칸을 탐색한다. a. 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다. b. 왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다. c. 네 방향 모두 청소가 이미 되…","frontmatter":{"date":"December 28, 2021","title":"[BOJ] 14503번: 로봇 청소기 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/boj-14503/"}},"next":{"id":"c55b1096-8008-58dc-9dbc-56d197234a24","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/17779\">https://www.acmicpc.net/problem/17779</a></p>\n<p>재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름도 재현시로 변경했다. 이번 선거에서는 최대한 공평하게 선거구를 획정하려고 한다.</p>\n<p>재현시는 크기가 N×N인 격자로 나타낼 수 있다. 격자의 각 칸은 구역을 의미하고, r행 c열에 있는 구역은 (r, c)로 나타낼 수 있다. 구역을 다섯 개의 선거구로 나눠야 하고, 각 구역은 다섯 선거구 중 하나에 포함되어야 한다. 선거구는 구역을 적어도 하나 포함해야 하고, 한 선거구에 포함되어 있는 구역은 모두 연결되어 있어야 한다. 구역 A에서 인접한 구역을 통해서 구역 B로 갈 수 있을 때, 두 구역은 연결되어 있다고 한다. 중간에 통하는 인접한 구역은 0개 이상이어야 하고, 모두 같은 선거구에 포함된 구역이어야 한다.</p>\n<p>선거구를 나누는 방법은 다음과 같다.</p>\n<ol>\n<li>기준점 (x, y)와 경계의 길이 d1, d2를 정한다. (d1, d2 ≥ 1, 1 ≤ x &#x3C; x+d1+d2 ≤ N, 1 ≤ y-d1 &#x3C; y &#x3C; y+d2 ≤ N)</li>\n<li>다음 칸은 경계선이다.\n<ol>\n<li>(x, y), (x+1, y-1), …, (x+d1, y-d1)</li>\n<li>(x, y), (x+1, y+1), …, (x+d2, y+d2)</li>\n<li>(x+d1, y-d1), (x+d1+1, y-d1+1), … (x+d1+d2, y-d1+d2)</li>\n<li>(x+d2, y+d2), (x+d2+1, y+d2-1), …, (x+d2+d1, y+d2-d1)</li>\n</ol>\n</li>\n<li>경계선과 경계선의 안에 포함되어있는 곳은 5번 선거구이다.</li>\n<li>5번 선거구에 포함되지 않은 구역 (r, c)의 선거구 번호는 다음 기준을 따른다.\n<ul>\n<li>1번 선거구: 1 ≤ r &#x3C; x+d1, 1 ≤ c ≤ y</li>\n<li>2번 선거구: 1 ≤ r ≤ x+d2, y &#x3C; c ≤ N</li>\n<li>3번 선거구: x+d1 ≤ r ≤ N, 1 ≤ c &#x3C; y-d1+d2</li>\n<li>4번 선거구: x+d2 &#x3C; r ≤ N, y-d1+d2 ≤ c ≤ N</li>\n</ul>\n</li>\n</ol>\n<p>아래는 크기가 7×7인 재현시를 다섯 개의 선거구로 나눈 방법의 예시이다.<br>\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 32.77777777777778%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAA7DAAAOwwHHb6hkAAABD0lEQVQoz12R246DMAxE+/9/uGpVSqGBBJwLICVAoqlslu7lwRrFJ2NPlMs8z1iWBb8154x1XT+9sw5W/rD/vov3DmYgXB8dnHOwlgTEGDESIXiHRhlUjRZWShFGwrwo+1hloDaEqh3w6gbRkSxKzkiJU0xQ2h68JzzVKKaUEqYpYCAP7z2maRKVga0acG8MejPiVhtoM6KUw8TJ7k8Day1Uz7zHvmesKYF910eP+mUQgv9JyAelCV9VD7K80X1StJLaiN5qDeL0pSCliE6P0mMWQpClMpDfz3HJ2gM4JwljTPDOotMkRr7HlWVgksVkHfy3XxgPPD+AL7FygrO2bZM03OfiHz7Zvu8fH9fZfwN7XRdsw/gwLgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"17779-ex.png\"\n        title=\"17779-ex.png\"\n        src=\"/static/593889dc697b92b7a33a8c8eb03cd86d/37523/17779-ex.png\"\n        srcset=\"/static/593889dc697b92b7a33a8c8eb03cd86d/e9ff0/17779-ex.png 180w,\n/static/593889dc697b92b7a33a8c8eb03cd86d/f21e7/17779-ex.png 360w,\n/static/593889dc697b92b7a33a8c8eb03cd86d/37523/17779-ex.png 720w,\n/static/593889dc697b92b7a33a8c8eb03cd86d/302a4/17779-ex.png 1080w,\n/static/593889dc697b92b7a33a8c8eb03cd86d/afd0b/17779-ex.png 1153w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<p>구역 (r, c)의 인구는 A[r][c]이고, 선거구의 인구는 선거구에 포함된 구역의 인구를 모두 합한 값이다. 선거구를 나누는 방법 중에서, 인구가 가장 많은 선거구와 가장 적은 선거구의 인구 차이의 최솟값을 구해보자.</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이 주어진다.</p>\n<p>둘째 줄부터 N개의 줄에 N개의 정수가 주어진다. r행 c열의 정수는 A[r][c]를 의미한다.</p>\n<ul>\n<li>5 ≤ N ≤ 20</li>\n<li>1 ≤ A[r][c] ≤ 100</li>\n</ul>\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<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>시뮬레이션, Brute Force</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\">def</span> <span class=\"token function\">divide_area</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> d1<span class=\"token punctuation\">,</span> d2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token builtin\">sum</span> <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\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    isFiveArea <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token boolean\">False</span> <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>N<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>\n\n    <span class=\"token comment\"># 5번 선거구 경계선 채우기</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>d1<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> isFiveArea<span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>y<span class=\"token operator\">-</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>d2<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> isFiveArea<span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>d1<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> isFiveArea<span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span>d2<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span>d2<span class=\"token operator\">-</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>d2<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> isFiveArea<span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span>d1<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>y<span class=\"token operator\">-</span>d1<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n\n    <span class=\"token comment\"># 5번 선거구 경계선 안쪽 채우기</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>x<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> x<span class=\"token operator\">+</span>d1<span class=\"token operator\">+</span>d2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        check <span class=\"token operator\">=</span> <span class=\"token number\">0</span>   <span class=\"token comment\"># 0: default, 1: 5구역 경계 시작, 2: 5구역 경계 끝</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> isFiveArea<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span> check <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n            <span class=\"token keyword\">if</span> check <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span> isFiveArea<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n            <span class=\"token keyword\">elif</span> check <span class=\"token operator\">==</span> <span class=\"token number\">2</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">break</span>\n    \n    <span class=\"token comment\"># 선거구 인구 계산</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>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> isFiveArea<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                <span class=\"token builtin\">sum</span><span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> population<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n            <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> j <span class=\"token operator\">&lt;=</span> y <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> i <span class=\"token operator\">&lt;</span> x<span class=\"token operator\">+</span>d1<span class=\"token punctuation\">:</span>\n                    <span class=\"token builtin\">sum</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> population<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n                <span class=\"token keyword\">elif</span> y <span class=\"token operator\">&lt;</span> j <span class=\"token operator\">&lt;</span> N <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> i <span class=\"token operator\">&lt;=</span> x<span class=\"token operator\">+</span>d2<span class=\"token punctuation\">:</span>\n                    <span class=\"token builtin\">sum</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> population<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n                <span class=\"token keyword\">elif</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> j <span class=\"token operator\">&lt;</span> y<span class=\"token operator\">-</span>d1<span class=\"token operator\">+</span>d2 <span class=\"token keyword\">and</span> x<span class=\"token operator\">+</span>d1 <span class=\"token operator\">&lt;=</span> i <span class=\"token operator\">&lt;</span> N<span class=\"token punctuation\">:</span>\n                    <span class=\"token builtin\">sum</span><span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> population<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n                <span class=\"token keyword\">elif</span> y<span class=\"token operator\">-</span>d1<span class=\"token operator\">+</span>d2 <span class=\"token operator\">&lt;=</span> j <span class=\"token operator\">&lt;</span> N <span class=\"token keyword\">and</span> x<span class=\"token operator\">+</span>d2 <span class=\"token operator\">&lt;</span> i <span class=\"token operator\">&lt;</span> N<span class=\"token punctuation\">:</span>\n                    <span class=\"token builtin\">sum</span><span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> population<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">return</span> <span class=\"token builtin\">max</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">sum</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token builtin\">min</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">sum</span><span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li>문제에서 제시한 것처럼 순서대로 구역을 나누고 선거구별 인구 계산하는 함수\n<ul>\n<li><strong>5번 선거구 경계선 채우기</strong><br>\n5번 선거구인지 아닌지를 나타내는 <code class=\"language-text\">isFiveArea</code> 리스트 선언 후<br>\n제시된 경계선 나누는 방법에 따라 해당하는 <code class=\"language-text\">isFiveArea</code> 값 <strong>True</strong>로 변경</li>\n<li><strong>5번 선거구 경계선 안쪽 채우기</strong><br>\n이중 for문을 이용해서 위에서부터 아래로, 왼쪽에서 오른쪽으로 5번 선거구 경계선 안에 해당하는지 확인<br>\n해당 행에서 경계선이 나오면 <code class=\"language-text\">check</code> 변수를 <strong>+1</strong>,<br>\ncheck가 1이면 경계선 안이기 때문에 해당하는 <code class=\"language-text\">isFiveArea</code> 값을 <strong>True</strong>로 변경<br>\n해당 행에서 경계선이 끝나는 부분이 나오면 check가 2일 것이므로, <strong>break</strong></li>\n<li><strong>선거구별 인구 계산</strong><br>\n선거구별 인구수 합을 저장할 <code class=\"language-text\">sum</code> 리스트 생성<br>\n<code class=\"language-text\">isFiveArea</code> 값이 <strong>True</strong>면 5번 선거구 인구 합에 인구수 더함<br>\n나머지 선거구들도 제시된 식에 맞게 계산해서 해당하는 <code class=\"language-text\">sum</code> 리스트 값에 인구수 더함<br>\n마지막으로 <code class=\"language-text\">sum</code> 리스트에서 <strong>max값과 min값의 차</strong>를 return</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\">result <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>maxsize\n<span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> N<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> y <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> N<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> d1 <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> N<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">for</span> d2 <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> N<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> <span class=\"token number\">1</span> <span class=\"token operator\">&lt;=</span> x <span class=\"token operator\">&lt;</span> x<span class=\"token operator\">+</span>d1<span class=\"token operator\">+</span>d2 <span class=\"token operator\">&lt;=</span> N <span class=\"token keyword\">and</span> <span class=\"token number\">1</span> <span class=\"token operator\">&lt;=</span> y<span class=\"token operator\">-</span>d1 <span class=\"token operator\">&lt;</span> y <span class=\"token operator\">&lt;</span> y<span class=\"token operator\">+</span>d2 <span class=\"token operator\">&lt;=</span> N<span class=\"token punctuation\">:</span>\n                    result <span class=\"token operator\">=</span> <span class=\"token builtin\">min</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">,</span> divide_area<span class=\"token punctuation\">(</span>x<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> y<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> d1<span class=\"token punctuation\">,</span> d2<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><strong>기준점(x,y)과 d1, d2를 설정해서 최솟값 계산</strong><br>\n제시된 식에 맞게 <strong>d1, d2</strong>를 설정한 후, <code class=\"language-text\">divide_area</code> 함수 실행,<br>\n실행된 결과와 원래 <code class=\"language-text\">result</code> 의 <strong>min값</strong>을 다시 <code class=\"language-text\">result</code> 에 저장<br>\n반복문 실행 후, <code class=\"language-text\">result</code> 출력</li>\n</ul>\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 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>\npopulation <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>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">divide_area</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> d1<span class=\"token punctuation\">,</span> d2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token builtin\">sum</span> <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\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    isFiveArea <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token boolean\">False</span> <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>N<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>\n\n    <span class=\"token comment\"># 5번 선거구 경계선 채우기</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>d1<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> isFiveArea<span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>y<span class=\"token operator\">-</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>d2<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> isFiveArea<span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>d1<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> isFiveArea<span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span>d2<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span>d2<span class=\"token operator\">-</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>d2<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> isFiveArea<span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span>d1<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>y<span class=\"token operator\">-</span>d1<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n\n    <span class=\"token comment\"># 5번 선거구 경계선 안쪽 채우기</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>x<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> x<span class=\"token operator\">+</span>d1<span class=\"token operator\">+</span>d2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        check <span class=\"token operator\">=</span> <span class=\"token number\">0</span>   <span class=\"token comment\"># 0: default, 1: 5구역 경계 시작, 2: 5구역 경계 끝</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> isFiveArea<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span> check <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n            <span class=\"token keyword\">if</span> check <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span> isFiveArea<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n            <span class=\"token keyword\">elif</span> check <span class=\"token operator\">==</span> <span class=\"token number\">2</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">break</span>\n    \n    <span class=\"token comment\"># 선거구 인구 계산</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>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> isFiveArea<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                <span class=\"token builtin\">sum</span><span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> population<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n            <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> j <span class=\"token operator\">&lt;=</span> y <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> i <span class=\"token operator\">&lt;</span> x<span class=\"token operator\">+</span>d1<span class=\"token punctuation\">:</span>\n                    <span class=\"token builtin\">sum</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> population<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n                <span class=\"token keyword\">elif</span> y <span class=\"token operator\">&lt;</span> j <span class=\"token operator\">&lt;</span> N <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> i <span class=\"token operator\">&lt;=</span> x<span class=\"token operator\">+</span>d2<span class=\"token punctuation\">:</span>\n                    <span class=\"token builtin\">sum</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> population<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n                <span class=\"token keyword\">elif</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> j <span class=\"token operator\">&lt;</span> y<span class=\"token operator\">-</span>d1<span class=\"token operator\">+</span>d2 <span class=\"token keyword\">and</span> x<span class=\"token operator\">+</span>d1 <span class=\"token operator\">&lt;=</span> i <span class=\"token operator\">&lt;</span> N<span class=\"token punctuation\">:</span>\n                    <span class=\"token builtin\">sum</span><span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> population<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n                <span class=\"token keyword\">elif</span> y<span class=\"token operator\">-</span>d1<span class=\"token operator\">+</span>d2 <span class=\"token operator\">&lt;=</span> j <span class=\"token operator\">&lt;</span> N <span class=\"token keyword\">and</span> x<span class=\"token operator\">+</span>d2 <span class=\"token operator\">&lt;</span> i <span class=\"token operator\">&lt;</span> N<span class=\"token punctuation\">:</span>\n                    <span class=\"token builtin\">sum</span><span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> population<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">return</span> <span class=\"token builtin\">max</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">sum</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token builtin\">min</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">sum</span><span class=\"token punctuation\">)</span>\n\nresult <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>maxsize\n<span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> N<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> y <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> N<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> d1 <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> N<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">for</span> d2 <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> N<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> <span class=\"token number\">1</span> <span class=\"token operator\">&lt;=</span> x <span class=\"token operator\">&lt;</span> x<span class=\"token operator\">+</span>d1<span class=\"token operator\">+</span>d2 <span class=\"token operator\">&lt;=</span> N <span class=\"token keyword\">and</span> <span class=\"token number\">1</span> <span class=\"token operator\">&lt;=</span> y<span class=\"token operator\">-</span>d1 <span class=\"token operator\">&lt;</span> y <span class=\"token operator\">&lt;</span> y<span class=\"token operator\">+</span>d2 <span class=\"token operator\">&lt;=</span> N<span class=\"token punctuation\">:</span>\n                    result <span class=\"token operator\">=</span> <span class=\"token builtin\">min</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">,</span> divide_area<span class=\"token punctuation\">(</span>x<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> y<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> d1<span class=\"token punctuation\">,</span> d2<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>처음에는 5번 선거구가 특이 케이스라는 것을 모르고 1번 선거구부터 주어진 식에 맞춰서 나눈 다음에 계산하려고 했다.<br>\n그러다가 뭔가 잘못된 것을 깨닫고 문제를 다시 읽은 후, 문제에서 제시된 순서대로 구현해나갔다.<br>\n(r,c)와 (x,y) 순서에서 계속 헷갈려서 풀이에 시간을 많이 쓴건 흠,,<br>\n다 풀고나니 코드 곳곳에서 효율적이지 않은 부분들이 보이는데 이건 차근차근 고쳐나가야지</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] 17779번: 게리맨더링 2 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/boj-17779/"}},"prev":{"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>","frontmatter":{"date":"December 29, 2021","title":"[BOJ] 3190번: 뱀 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/boj-3190/"}},"site":{"siteMetadata":{"siteUrl":"https://jfelog.netlify.app","comments":{"utterances":{"repo":"Go-Jaecheol/Jfe_Blog"}}}}},"pageContext":{"slug":"/boj-14503/","nextSlug":"/boj-17779/","prevSlug":"/boj-3190/"}},
    "staticQueryHashes": ["1073350324","1956554647","2938748437"]}