{
    "componentChunkName": "component---src-templates-blog-template-js",
    "path": "/boj-17779/",
    "result": {"data":{"cur":{"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>","excerpt":"문제 https://www.acmicpc.net/problem/17779 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름도 재현시로 변경했다. 이번 선거에서는 최대한 공평하게 선거구를 획정하려고 한다. 재현시는 크기가 N×N인 격자로 나타낼 수 있다. 격자의 각 칸은 구역을 의미하고, r행 c열에 있는 구역은 (r, c)로 나타낼 수 있다. 구역을 다섯 개의 선거구로 나눠야 하고, 각 구역은 다섯 선거구 중 하나에 포함되어야 한다. 선거구는 구역을 적어도 하나 포함해야 하고, 한 선거구에 포함되어 있는 구역은 모두 연결되어 있어야 한다. 구역 A에서 인접한 구역을 통해서 구역 B로 갈 수 있을 때, 두 구역은 연결되어 있다고 한다. 중간에 통하는 인접한 구역은 0개 이상이어야 하고, 모두 같은 선거구에 포함된 구역이어야 한다. 선거구를 나누는 방법은…","frontmatter":{"date":"December 28, 2021","title":"[BOJ] 17779번: 게리맨더링 2 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/boj-17779/"}},"next":{"id":"e244f6cc-39e7-5714-91f5-da90a17d13ee","html":"<h2 id=\"-sql-schema--catalog\" style=\"position:relative;\"><a href=\"#-sql-schema--catalog\" aria-label=\" sql schema  catalog 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>📃 SQL Schema &#x26; Catalog</h2>\n<h3 id=\"sql-schema\" style=\"position:relative;\"><a href=\"#sql-schema\" aria-label=\"sql schema 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>SQL Schema</h3>\n<p><strong>데이터베이스</strong>라고도 불리며, 같은 데이터베이스에 속해 있는 테이블과 다른 구조들을 그룹짓는 개념이다.<br>\nSchema name으로 구별된다.<br>\n스키마를 소유하는 사용자를 나타내는 <strong>authorization identifier</strong>와 스키마에 있는 각각 element의 <strong>descriptor</strong>를 포함한다.<br>\nSchema element는 <strong>table, constraints, views, domains</strong> 등을 포함한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">CREATE</span> <span class=\"token keyword\">SCHEMA</span> COMPANY <span class=\"token keyword\">AUTHORIZATION</span> <span class=\"token string\">'Joshua'</span></code></pre></div>\n<h3 id=\"catalog\" style=\"position:relative;\"><a href=\"#catalog\" aria-label=\"catalog 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>Catalog</h3>\n<p><strong>스키마의 모임</strong>으로, <code class=\"language-text\">INFORMATION_SCHEMA</code> 라고 불리는 특별한 스키마를 항상 가지고 있다.<br>\n<strong>Integrity constraints</strong>는 같은 catalog의 스키마들 사이에서만 정의될 수 있다.<br>\n같은 catalog에 있는 스키마들은 <strong>type/domain과 같은 특정 element</strong>를 공유할 수 있다.</p>\n<hr>\n<h2 id=\"-create-table\" style=\"position:relative;\"><a href=\"#-create-table\" aria-label=\" create table 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>📚 CREATE TABLE</h2>\n<p>새로운 relation R을 정의한다.<br>\nR에 <strong>이름</strong>을 주고나서, R의 <strong>attributes</strong>와 <strong>types(domains)</strong>, <strong>초기 제약조건들(NOT NULL or UNIQUE)</strong> 을 정의한다.<br>\n<strong>key, 엔터티 무결성, 참조 무결성 제약조건들</strong>은 attribute 선언 이후에 정의할 수 있다.<br>\n(테이블 생성 후에도 <code class=\"language-text\">ALTER TABLE</code> 을 사용해서 추가할 수 있음)</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">CREATE</span> <span class=\"token keyword\">TABLE</span> EMPLOYEE \n{\n<span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n}</code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">ALTER</span> <span class=\"token keyword\">TABLE</span> EMPLOYEE <span class=\"token keyword\">ADD</span> <span class=\"token keyword\">FOREIGN</span> <span class=\"token keyword\">KEY</span> <span class=\"token punctuation\">(</span>Super_ssn<span class=\"token punctuation\">)</span> <span class=\"token keyword\">REFERENCES</span> EMPLOYEE<span class=\"token punctuation\">(</span>Ssn<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<blockquote>\n<ul>\n<li>\n<h3 id=\"base-tables-base-relations\" style=\"position:relative;\"><a href=\"#base-tables-base-relations\" aria-label=\"base tables base relations 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>Base tables (base relations)</h3>\nTable(relation)과 row(tuple)들이 실제로 DBMS 상에 생성되고 저장된다.</li>\n<li>\n<h3 id=\"virtual-relations-views\" style=\"position:relative;\"><a href=\"#virtual-relations-views\" aria-label=\"virtual relations views 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>Virtual relations (views)</h3>\n물리적 파일과 실제로 일치할 수도, 안할 수도 있다.<br>\nview에 속한 tuple들은 구체화 되어 있지 않는 한 view가 참조될 때만 계산된다.<br>\n<code class=\"language-text\">CREATE VIEW</code> 를 통해 생성된다.\n<ul>\n<li>장점 : 1) 저장공간 낭비를 줄일 수 있고 2) 권한을 제한할 수 있다. 3) 계산 시간이 오래 걸리지 않을 때 유용</li>\n</ul>\n</li>\n</ul>\n</blockquote>\n<hr>\n<h2 id=\"-attribute의-data-type과-domain\" style=\"position:relative;\"><a href=\"#-attribute%EC%9D%98-data-type%EA%B3%BC-domain\" aria-label=\" attribute의 data type과 domain 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>🧩 Attribute의 Data Type과 Domain</h2>\n<ul>\n<li>\n<h3 id=\"numeric\" style=\"position:relative;\"><a href=\"#numeric\" aria-label=\"numeric 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>Numeric</h3>\n<p>정수 표현 : <code class=\"language-text\">INTEGER</code>, <code class=\"language-text\">INT</code>, <code class=\"language-text\">SMALLINT</code>, 오라클에서는 <code class=\"language-text\">NUMBER</code><br>\n실수 표현 : <code class=\"language-text\">FLOAT</code>, <code class=\"language-text\">REAL</code>, <code class=\"language-text\">DOUBLE PRECISION</code><br>\nFormated number : <code class=\"language-text\">DECIMAL(i, j)</code>, <code class=\"language-text\">DEC(i, j)</code>, <code class=\"language-text\">NUMERIC(i, j)</code>, 여기서 i: 전체 자릿수, j: 소수점 아래 자릿수</p>\n</li>\n<li>\n<h3 id=\"charcter-string\" style=\"position:relative;\"><a href=\"#charcter-string\" aria-label=\"charcter string 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>Charcter-string</h3>\n<p>고정 길이 : <code class=\"language-text\">CHAR(n)</code>, <code class=\"language-text\">CHARACTER(n)</code>, 여기서 n은 최대 가능 문자 수를 의미하고, n보다 짧으면 문자 뒤에 공백이 채워진다.<br>\n가변 길이 : <code class=\"language-text\">VARCHAR(n)</code>, <code class=\"language-text\">CHAR VARYING(n)</code>, <code class=\"language-text\">CHARACTER VARYING(n)</code>, 이 외에 <code class=\"language-text\">CLOB(CHARACTER LARGE OBJECT)</code>은 문서처럼 큰 텍스트 값들을 나타낼 수 있다.</p>\n</li>\n<li>\n<h3 id=\"bit-string\" style=\"position:relative;\"><a href=\"#bit-string\" aria-label=\"bit string 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>Bit-string</h3>\n<p>고정 길이 : <code class=\"language-text\">BIT(n)</code>, 여기서 n은 최대 가능 bit 수를 의미하고, B’10101’과 같은 형식을 사용해야 한다.<br>\n가변 길이 : <code class=\"language-text\">BIT VARYING(n)</code>, 이 외에 <code class=\"language-text\">BLOB(BINARY LARGE OBJECT)</code>은 실행가능한 코드나 java 객체처럼 큰 binary 값들을 나타낼 수 있다.</p>\n</li>\n<li>\n<h3 id=\"boolean\" style=\"position:relative;\"><a href=\"#boolean\" aria-label=\"boolean 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>Boolean</h3>\n<p><code class=\"language-text\">TRUE</code> or <code class=\"language-text\">FALSE</code> or <code class=\"language-text\">NULL</code></p>\n</li>\n<li>\n<h3 id=\"date\" style=\"position:relative;\"><a href=\"#date\" aria-label=\"date 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>Date</h3>\n<p><strong>YYYY-MM-DD</strong> 형식, 오라클에서는 <code class=\"language-text\">to_date()</code>를 사용</p>\n</li>\n<li>\n<h3 id=\"time\" style=\"position:relative;\"><a href=\"#time\" aria-label=\"time 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>Time</h3>\n<p><strong>HH:MM:SS</strong> 형식</p>\n</li>\n<li>\n<h3 id=\"timestamp\" style=\"position:relative;\"><a href=\"#timestamp\" aria-label=\"timestamp 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>Timestamp</h3>\n<p><strong>YYYY-MM-DD HH:MM:SS.xxxxxx</strong> 형식으로, Date와 Time을 합치고 second의 소수점 이하 최소 6자리가 추가된 형식</p>\n</li>\n<li>\n<h3 id=\"interval\" style=\"position:relative;\"><a href=\"#interval\" aria-label=\"interval 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>Interval</h3>\n<p>Date, Time, Timestamp의 절댓값을 증가, 감소시키는데 사용하는 상대값을 나타낼 수 있다.</p>\n</li>\n<li>\n<h3 id=\"domain\" style=\"position:relative;\"><a href=\"#domain\" aria-label=\"domain 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>Domain</h3>\n<p>domain의 데이터 타입을 쉽게 변경할 수 있고, 스키마의 가독성을 높일 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">CREATE</span> DOMAIN SSN_TYPE <span class=\"token keyword\">AS</span> <span class=\"token keyword\">CHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">9</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n<li>\n<h3 id=\"type\" style=\"position:relative;\"><a href=\"#type\" aria-label=\"type 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>Type</h3>\n<p>객체를 저장하는 용도로, 사용자 정의 타입(UDTs)을 생성하는데 사용된다.<br>\n<code class=\"language-text\">CREATE TYPE</code> 명령어로 생성</p>\n</li>\n</ul>\n<hr>\n<h2 id=\"-sql-제약조건-설정\" style=\"position:relative;\"><a href=\"#-sql-%EC%A0%9C%EC%95%BD%EC%A1%B0%EA%B1%B4-%EC%84%A4%EC%A0%95\" aria-label=\" sql 제약조건 설정 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>🚧 SQL 제약조건 설정</h2>\n<ul>\n<li>\n<h3 id=\"attribute-제약조건-설정-방법\" style=\"position:relative;\"><a href=\"#attribute-%EC%A0%9C%EC%95%BD%EC%A1%B0%EA%B1%B4-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95\" aria-label=\"attribute 제약조건 설정 방법 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>Attribute 제약조건 설정 방법</h3>\n<ul>\n<li><code class=\"language-text\">DEFAULT &lt;value></code> 구문으로 default 값 설정</li>\n<li><code class=\"language-text\">NOT NULL</code></li>\n<li><code class=\"language-text\">CHECK</code> 구문으로 domain 확인 가능</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\">Dnumber <span class=\"token keyword\">INT</span> <span class=\"token operator\">NOT</span> <span class=\"token boolean\">NULL</span> <span class=\"token keyword\">CHECK</span> <span class=\"token punctuation\">(</span>Dnumber <span class=\"token operator\">></span> <span class=\"token number\">0</span> <span class=\"token operator\">and</span> Dnumber <span class=\"token operator\">&lt;</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span></code></pre></div>\n</li>\n<li>\n<h3 id=\"key-제약조건-설정-방법\" style=\"position:relative;\"><a href=\"#key-%EC%A0%9C%EC%95%BD%EC%A1%B0%EA%B1%B4-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95\" aria-label=\"key 제약조건 설정 방법 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>Key 제약조건 설정 방법</h3>\n<ul>\n<li><code class=\"language-text\">PRIMARY KEY</code> 구문으로 Primary key 지정</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\">Dnumber <span class=\"token keyword\">INT</span> <span class=\"token keyword\">PRIMARY</span> <span class=\"token keyword\">KEY</span>\n<span class=\"token keyword\">PRIMARY</span> <span class=\"token keyword\">KEY</span><span class=\"token punctuation\">(</span>State<span class=\"token punctuation\">,</span> Number<span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li><code class=\"language-text\">UNIQUE</code> 구문으로 후보키 지정</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\">Dnumber <span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">15</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">UNIQUE</span>\n<span class=\"token keyword\">UNIQUE</span><span class=\"token punctuation\">(</span>State<span class=\"token punctuation\">,</span> Number<span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li><code class=\"language-text\">FOREIGN KEY</code> 구문으로 Foreign key 지정, <code class=\"language-text\">SET NULL</code>, <code class=\"language-text\">CASCADE</code> 같은 <strong>참조 트리거 액션 절</strong>을 추가할 수 있다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">FOREIGN</span> <span class=\"token keyword\">KEY</span> <span class=\"token punctuation\">(</span>Mgr_ssn<span class=\"token punctuation\">)</span> <span class=\"token keyword\">REFERENCES</span> EMPLOYEE<span class=\"token punctuation\">(</span>Ssn<span class=\"token punctuation\">)</span></code></pre></div>\n</li>\n</ul>\n<div class=\"table-of-contents\">\n<ul>\n<li>\n<p><a href=\"#-sql-schema--catalog\">📃 SQL Schema &#x26; Catalog</a></p>\n<ul>\n<li><a href=\"#sql-schema\">SQL Schema</a></li>\n<li><a href=\"#catalog\">Catalog</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#-create-table\">📚 CREATE TABLE</a></p>\n</li>\n<li>\n<p><a href=\"#-attribute%EC%9D%98-data-type%EA%B3%BC-domain\">🧩 Attribute의 Data Type과 Domain</a></p>\n</li>\n<li>\n<p><a href=\"#-sql-%EC%A0%9C%EC%95%BD%EC%A1%B0%EA%B1%B4-%EC%84%A4%EC%A0%95\">🚧 SQL 제약조건 설정</a></p>\n</li>\n</ul>\n</div>","frontmatter":{"date":"December 08, 2021","title":"[Database] SQL 기초","categories":"Database","author":"JFe","emoji":"🏫"},"fields":{"slug":"/db-sql-basic/"}},"prev":{"id":"31d416f5-d1b6-58db-9b4b-e149c36e0f61","html":"<h2 id=\"문제\" style=\"position:relative;\"><a href=\"#%EB%AC%B8%EC%A0%9C\" aria-label=\"문제 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>문제</h2>\n<p><a href=\"https://www.acmicpc.net/problem/14503\">https://www.acmicpc.net/problem/14503</a></p>\n<p>로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오.</p>\n<p>로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다.</p>\n<p>로봇 청소기는 다음과 같이 작동한다.</p>\n<ol>\n<li>현재 위치를 청소한다.</li>\n<li>현재 위치에서 현재 방향을 기준으로 왼쪽 방향부터 차례대로 인접한 칸을 탐색한다.<br>\na. 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다.<br>\nb. 왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다.<br>\nc. 네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다.<br>\nd. 네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춘다.</li>\n</ol>\n<p>로봇 청소기는 이미 청소되어있는 칸을 또 청소하지 않으며, 벽을 통과할 수 없다.</p>\n<hr>\n<h2 id=\"입력\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EB%A0%A5\" aria-label=\"입력 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>입력</h2>\n<p>첫째 줄에 세로 크기 N과 가로 크기 M이 주어진다. (3 ≤ N, M ≤ 50)</p>\n<p>둘째 줄에 로봇 청소기가 있는 칸의 좌표 (r, c)와 바라보는 방향 d가 주어진다. d가 0인 경우에는 북쪽을, 1인 경우에는 동쪽을, 2인 경우에는 남쪽을, 3인 경우에는 서쪽을 바라보고 있는 것이다.</p>\n<p>셋째 줄부터 N개의 줄에 장소의 상태가 북쪽부터 남쪽 순서대로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 빈 칸은 0, 벽은 1로 주어진다. 지도의 첫 행, 마지막 행, 첫 열, 마지막 열에 있는 모든 칸은 벽이다.</p>\n<p>로봇 청소기가 있는 칸의 상태는 항상 빈 칸이다.</p>\n<hr>\n<h2 id=\"출력\" style=\"position:relative;\"><a href=\"#%EC%B6%9C%EB%A0%A5\" aria-label=\"출력 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>출력</h2>\n<p>로봇 청소기가 청소하는 칸의 개수를 출력한다.</p>\n<hr>\n<p><strong>예제 입력 1</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">3</span> <span class=\"token number\">3</span>\n<span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span>\n<span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span></code></pre></div>\n<p><strong>예제 출력 1</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">1</span></code></pre></div>\n<p><strong>예제 입력 2</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">11</span> <span class=\"token number\">10</span>\n<span class=\"token number\">7</span> <span class=\"token number\">4</span> <span class=\"token number\">0</span>\n<span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">0</span> <span class=\"token number\">1</span>\n<span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span> <span class=\"token number\">1</span></code></pre></div>\n<p><strong>예제 출력 2</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token number\">57</span></code></pre></div>\n<hr>\n<h2 id=\"-algorithm\" style=\"position:relative;\"><a href=\"#-algorithm\" aria-label=\" algorithm permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>🔍 Algorithm</h2>\n<p><strong>시뮬레이션</strong></p>\n<h2 id=\"-logic\" style=\"position:relative;\"><a href=\"#-logic\" aria-label=\" logic permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>💻 Logic</h2>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">cur <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">,</span> r<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">while</span> cur<span class=\"token punctuation\">:</span>\n    cur_x<span class=\"token punctuation\">,</span> cur_y<span class=\"token punctuation\">,</span> d <span class=\"token operator\">=</span> cur<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> area<span class=\"token punctuation\">[</span>cur_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>cur_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n        area<span class=\"token punctuation\">[</span>cur_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>cur_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">2</span>\n        result <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> d <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> d <span class=\"token operator\">=</span> <span class=\"token number\">3</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span> d <span class=\"token operator\">-=</span> <span class=\"token number\">1</span>\n        next_x <span class=\"token operator\">=</span> cur_x <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        next_y <span class=\"token operator\">=</span> cur_y <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">if</span> area<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n            cur<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>next_x<span class=\"token punctuation\">,</span> next_y<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token keyword\">break</span>\n    <span class=\"token keyword\">if</span> i <span class=\"token operator\">==</span> <span class=\"token number\">3</span> <span class=\"token keyword\">and</span> <span class=\"token keyword\">not</span> cur<span class=\"token punctuation\">:</span>\n        next_x <span class=\"token operator\">=</span> cur_x <span class=\"token operator\">+</span> <span class=\"token operator\">-</span>dx<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        next_y <span class=\"token operator\">=</span> cur_y <span class=\"token operator\">+</span> <span class=\"token operator\">-</span>dy<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">if</span> area<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">break</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            cur<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>next_x<span class=\"token punctuation\">,</span> next_y<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li>문제에서 제시한 작동 방법에 맞춰 위치 이동\n<ul>\n<li><strong>현재 위치 청소</strong><br>\n현재 위치가 청소되지 않았으면 <code class=\"language-text\">area[cur_y][cur_x] == 0</code>,<br>\n해당 <code class=\"language-text\">area</code> 값을 <strong>2</strong>로 변경하고, <code class=\"language-text\">result</code> 값 <strong>1</strong> 증가</li>\n<li><strong>현재 방향 기준으로 왼쪽 방향부터 탐색</strong><br>\n현재 방향 <code class=\"language-text\">d</code>를 기준으로 왼쪽부터 돌아가며 4번 for문,<br>\n이 과정에서 청소하지 않은 곳이 있으면 그 곳으로 이동하기 위해 <code class=\"language-text\">cur.append((next_x, next_y, d))</code> 하고, <strong>break</strong></li>\n<li><strong>뒤로 후진하는 경우</strong><br>\nfor문을 4번 다 돌았지만 <code class=\"language-text\">cur</code>에 <strong>append</strong> 된 값이 없으면, 뒤로 후진하고 <strong>append</strong>\n<blockquote>\n<p>이 때, 후진한 위치의 <code class=\"language-text\">area</code> 값이 <strong>1</strong>이면 <strong>break</strong>하고 결과 출력</p>\n</blockquote>\n</li>\n</ul>\n</li>\n</ul>\n<hr>\n<h2 id=\"-code\" style=\"position:relative;\"><a href=\"#-code\" aria-label=\" code permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>🧩 Code</h2>\n<details><summary>전체 코드 확인</summary>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> sys\nN<span class=\"token punctuation\">,</span> M <span class=\"token operator\">=</span> <span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nr<span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">,</span> d <span class=\"token operator\">=</span> <span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\narea <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\ndx <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\ndy <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\nresult <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\ncur <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">,</span> r<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">while</span> cur<span class=\"token punctuation\">:</span>\n    cur_x<span class=\"token punctuation\">,</span> cur_y<span class=\"token punctuation\">,</span> d <span class=\"token operator\">=</span> cur<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> area<span class=\"token punctuation\">[</span>cur_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>cur_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n        area<span class=\"token punctuation\">[</span>cur_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>cur_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">2</span>\n        result <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> d <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> d <span class=\"token operator\">=</span> <span class=\"token number\">3</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span> d <span class=\"token operator\">-=</span> <span class=\"token number\">1</span>\n        next_x <span class=\"token operator\">=</span> cur_x <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        next_y <span class=\"token operator\">=</span> cur_y <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">if</span> area<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n            cur<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>next_x<span class=\"token punctuation\">,</span> next_y<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token keyword\">break</span>\n    <span class=\"token keyword\">if</span> i <span class=\"token operator\">==</span> <span class=\"token number\">3</span> <span class=\"token keyword\">and</span> <span class=\"token keyword\">not</span> cur<span class=\"token punctuation\">:</span>\n        next_x <span class=\"token operator\">=</span> cur_x <span class=\"token operator\">+</span> <span class=\"token operator\">-</span>dx<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        next_y <span class=\"token operator\">=</span> cur_y <span class=\"token operator\">+</span> <span class=\"token operator\">-</span>dy<span class=\"token punctuation\">[</span>d<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">if</span> area<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">break</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            cur<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>next_x<span class=\"token punctuation\">,</span> next_y<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span></code></pre></div>\n</details>\n<h2 id=\"-review\" style=\"position:relative;\"><a href=\"#-review\" aria-label=\" review permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>📝 Review</h2>\n<p>처음에는 재귀함수가 먼저 생각나서 재귀함수로 구현을 하려고 했는데 그 과정에서 코드가 너무 길어지고, 제대로 결과가 바로 안나와서 미련없이 바로 원래 익숙한 for문 형태로 바꿔서 풀었다.</p>\n<p>좌표 값을 이상하게 생각해서 쓸데없는 시간을 보내긴 했지만, 그렇게 오래 걸리지는 않은 듯</p>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%9E%85%EB%A0%A5\">입력</a></li>\n<li><a href=\"#%EC%B6%9C%EB%A0%A5\">출력</a></li>\n<li><a href=\"#-algorithm\">🔍 Algorithm</a></li>\n<li><a href=\"#-logic\">💻 Logic</a></li>\n<li><a href=\"#-code\">🧩 Code</a></li>\n<li><a href=\"#-review\">📝 Review</a></li>\n</ul>\n</div>","frontmatter":{"date":"December 28, 2021","title":"[BOJ] 14503번: 로봇 청소기 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/boj-14503/"}},"site":{"siteMetadata":{"siteUrl":"https://jfelog.netlify.app","comments":{"utterances":{"repo":"Go-Jaecheol/Jfe_Blog"}}}}},"pageContext":{"slug":"/boj-17779/","nextSlug":"/db-sql-basic/","prevSlug":"/boj-14503/"}},
    "staticQueryHashes": ["1073350324","1956554647","2938748437"]}