{
    "componentChunkName": "component---src-templates-blog-template-js",
    "path": "/db-sql-basic/",
    "result": {"data":{"cur":{"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>","excerpt":"📃 SQL Schema & Catalog SQL Schema 데이터베이스라고도 불리며, 같은 데이터베이스에 속해 있는 테이블과 다른 구조들을 그룹짓는 개념이다. Schema name으로 구별된다. 스키마를 소유하는 사용자를 나타내는 authorization identifier와 스키마에 있는 각각 element의 descriptor를 포함한다. Schema element는 table, constraints, views, domains 등을 포함한다. Catalog 스키마의 모임으로,  라고 불리는 특별한 스키마를 항상 가지고 있다. Integrity constraints는 같은 catalog의 스키마들 사이에서만 정의될 수 있다. 같은 catalog에 있는 스키마들은 type/domain과 같은 특정 element를 공유할 수 있다. 📚 CREATE TABLE 새로운 relation R을 정의한다. R에 이름을 주고나서, R의 attributes와 types(domains), 초기…","frontmatter":{"date":"December 08, 2021","title":"[Database] SQL 기초","categories":"Database","author":"JFe","emoji":"🏫"},"fields":{"slug":"/db-sql-basic/"}},"next":{"id":"94a97aa8-5de8-590c-94a7-d3f25beca2c3","html":"<h2 id=\"-er-to-relational-mapping\" style=\"position:relative;\"><a href=\"#-er-to-relational-mapping\" aria-label=\" er to relational mapping 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>🗺 ER-to-Relational Mapping</h2>\n<ul>\n<li>\n<h3 id=\"goals\" style=\"position:relative;\"><a href=\"#goals\" aria-label=\"goals 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>Goals</h3>\n<ol>\n<li>모든 정보를 보존</li>\n<li>최대한 가능한 만큼 제약조건들을 유지</li>\n<li>NULL 값들을 최소화</li>\n</ol>\n</li>\n</ul>\n<hr>\n<h2 id=\"step-1-regular-entity-types\" style=\"position:relative;\"><a href=\"#step-1-regular-entity-types\" aria-label=\"step 1 regular entity types 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>Step 1. Regular Entity Types</h2>\n<p>기존 엔터티의 attribute를 전부 포함하고, key attributes 중에서 하나를 골라 <strong>Primary key</strong>로 정한다.<br>\n만약, 고른 key가 <strong>composite</strong>이면 해당하는 attribute들 모두 <strong>Primary key</strong>로 정한다.</p>\n<h2 id=\"step-2-weak-entity-types\" style=\"position:relative;\"><a href=\"#step-2-weak-entity-types\" aria-label=\"step 2 weak entity types 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>Step 2. Weak Entity Types</h2>\n<p><strong>weak</strong> 엔터티의 attribute를 전부 포함<br>\n<strong>owner</strong> 엔터티의 <strong>Primary key</strong>를 <strong>Foreign key</strong>로 가지고,<br>\n<strong>owner</strong> 엔터티의 <strong>Primary key</strong>와 weak 엔터티의 <strong>Partial key</strong>를 <strong>Primary key</strong>로 가진다.</p>\n<h2 id=\"step-3-binary-11-relation-types\" style=\"position:relative;\"><a href=\"#step-3-binary-11-relation-types\" aria-label=\"step 3 binary 11 relation types 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>Step 3. Binary 1:1 Relation Types</h2>\n<p>상황에 따라 3가지 방법으로 가능하다.</p>\n<h3 id=\"1-foreign-key-approach-2-relations\" style=\"position:relative;\"><a href=\"#1-foreign-key-approach-2-relations\" aria-label=\"1 foreign key approach 2 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>1. Foreign key approach (2 relations)</h3>\n<p>주로 <strong>한쪽이 total participation</strong>일 때 사용<br>\ntotal participation인 쪽을 <strong>S</strong>, 반대를 <strong>T</strong>로 두면, T의 <strong>Primary key</strong>에 해당하는 <strong>Foreign key</strong>를 S에 만들어서 서로 연결시킨다.</p>\n<h3 id=\"2-merged-relation-1-relation\" style=\"position:relative;\"><a href=\"#2-merged-relation-1-relation\" aria-label=\"2 merged relation 1 relation 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>2. Merged relation (1 relation)</h3>\n<p><strong>둘다 total participation</strong>인 경우에, 두 entity를 <strong>하나의 relation</strong>으로 합친다.</p>\n<h3 id=\"3-cross-reference-or-relationship-relation-3-relations\" style=\"position:relative;\"><a href=\"#3-cross-reference-or-relationship-relation-3-relations\" aria-label=\"3 cross reference or relationship relation 3 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>3. Cross-reference or relationship relation (3 relations)</h3>\n<p>세 번째 relation <strong>U</strong>를 만들어서 S, T와 연결<br>\nS와 T의 <strong>Foreign key</strong> 중 하나를 U의 <strong>Primary key</strong>로 만들고, 나머지 <strong>Foreign key</strong> 하나는 U의 <strong>Unique key</strong>로 만든다.<br>\n추가적인 <strong>join operation</strong>이 필요</p>\n<h2 id=\"step-4-binary-1n-relation-types\" style=\"position:relative;\"><a href=\"#step-4-binary-1n-relation-types\" aria-label=\"step 4 binary 1n relation types 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>Step 4. Binary 1:N Relation Types</h2>\n<p><strong>1-side</strong>의 <strong>Primary key</strong>를 <strong>N-side</strong>에 <strong>Foreign key</strong>로 가지고 서로 연결시킨다.</p>\n<h2 id=\"step-5-binary-mn-relation-types\" style=\"position:relative;\"><a href=\"#step-5-binary-mn-relation-types\" aria-label=\"step 5 binary mn relation types 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>Step 5. Binary M:N Relation Types</h2>\n<p>relationship relation이라 불리는 새로운 relation <strong>U</strong>를 생성<br>\n각각 엔터티에서 <strong>Primary key</strong>들을 뽑아서 U의 <strong>Foreign key</strong>로 만들고 서로 연결<br>\n이 때, 이 key들은 U의 <strong>Primary key</strong>가 된다.</p>\n<h2 id=\"step-6-multivalued-attributes\" style=\"position:relative;\"><a href=\"#step-6-multivalued-attributes\" aria-label=\"step 6 multivalued attributes 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>Step 6. Multivalued attributes</h2>\n<p><strong>multivalued attribute A</strong>에 대해서, 새로운 relation <strong>U</strong>를 만든다.<br>\nU의 <strong>Foreign key</strong>로는, 원래 A attribute가 속했던 entity의 <strong>Primary key</strong>를 Foreign key로 가진다.<br>\nU의 <strong>Primary key</strong>로는, 위에 얘기한 <strong>Foreign key</strong>와 원래 <strong>attribute A</strong>, 이렇게 둘을 Primary key로 가진다.</p>\n<h2 id=\"step-7-n-ary-relationship-types\" style=\"position:relative;\"><a href=\"#step-7-n-ary-relationship-types\" aria-label=\"step 7 n ary relationship types 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>Step 7. N-ary Relationship Types</h2>\n<p>N-ary relationship type <strong>R</strong>에서 <strong>n > 2</strong> 면, 새로운 relationship relation <strong>U</strong>를 생성<br>\n참여하는 모든 entity의 <strong>Primary key</strong>들을 U의 <strong>Foreign key</strong>로 가진다.</p>\n<p><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: 47.22222222222222%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAQADBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAe2agzH/xAAVEAEBAAAAAAAAAAAAAAAAAABBIP/aAAgBAQABBQJY/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAGRAAAwADAAAAAAAAAAAAAAAAAAERICFB/9oACAEBAAE/IVaOhWbw/9oADAMBAAIAAwAAABDAD//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABkQAQADAQEAAAAAAAAAAAAAAAEAETEhEP/aAAgBAQABPxDIUL7AbB7e1COlsNY75//Z'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"mapping-terms.jpg\"\n        title=\"mapping-terms.jpg\"\n        src=\"/static/f63d1accf59d9598d8969f6d850f2513/80e3c/mapping-terms.jpg\"\n        srcset=\"/static/f63d1accf59d9598d8969f6d850f2513/4ec73/mapping-terms.jpg 180w,\n/static/f63d1accf59d9598d8969f6d850f2513/158ba/mapping-terms.jpg 360w,\n/static/f63d1accf59d9598d8969f6d850f2513/80e3c/mapping-terms.jpg 720w,\n/static/f63d1accf59d9598d8969f6d850f2513/49e4f/mapping-terms.jpg 836w\"\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<div class=\"table-of-contents\">\n<ul>\n<li>\n<p><a href=\"#-er-to-relational-mapping\">🗺 ER-to-Relational Mapping</a></p>\n</li>\n<li>\n<p><a href=\"#step-1-regular-entity-types\">Step 1. Regular Entity Types</a></p>\n</li>\n<li>\n<p><a href=\"#step-2-weak-entity-types\">Step 2. Weak Entity Types</a></p>\n</li>\n<li>\n<p><a href=\"#step-3-binary-11-relation-types\">Step 3. Binary 1:1 Relation Types</a></p>\n<ul>\n<li><a href=\"#1-foreign-key-approach-2-relations\">1. Foreign key approach (2 relations)</a></li>\n<li><a href=\"#2-merged-relation-1-relation\">2. Merged relation (1 relation)</a></li>\n<li><a href=\"#3-cross-reference-or-relationship-relation-3-relations\">3. Cross-reference or relationship relation (3 relations)</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#step-4-binary-1n-relation-types\">Step 4. Binary 1:N Relation Types</a></p>\n</li>\n<li>\n<p><a href=\"#step-5-binary-mn-relation-types\">Step 5. Binary M:N Relation Types</a></p>\n</li>\n<li>\n<p><a href=\"#step-6-multivalued-attributes\">Step 6. Multivalued attributes</a></p>\n</li>\n<li>\n<p><a href=\"#step-7-n-ary-relationship-types\">Step 7. N-ary Relationship Types</a></p>\n</li>\n</ul>\n</div>","frontmatter":{"date":"December 07, 2021","title":"[Database] ER-to-Relational Mapping","categories":"Database","author":"JFe","emoji":"🗺"},"fields":{"slug":"/db-er-to-relational/"}},"prev":{"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/"}},"site":{"siteMetadata":{"siteUrl":"https://jfelog.netlify.app","comments":{"utterances":{"repo":"Go-Jaecheol/Jfe_Blog"}}}}},"pageContext":{"slug":"/db-sql-basic/","nextSlug":"/db-er-to-relational/","prevSlug":"/boj-17779/"}},
    "staticQueryHashes": ["1073350324","1956554647","2938748437"]}