{
    "componentChunkName": "component---src-templates-blog-template-js",
    "path": "/boj-17136/",
    "result": {"data":{"cur":{"id":"3b9115f0-464e-53d2-9908-0d5c171d5e69","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/17136\">https://www.acmicpc.net/problem/17136</a></p>\n<p>&#x3C;그림 1>과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다.</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: 28.888888888888886%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAlElEQVQY032QjQ7DIAiE+/4va+p/tUrzkbC4zc3k4gHegRyyOXNOGWPoDVprcl2X4r5vqbVKjFFyzpJSUs47zmEiDBD03vU2ARxRCEFzpRTNE5MH3vt3w7Vg3Dkn53mqAUZw6jYVdWLy8K8J+QpiJrIvISRmGoQAQ2DNrdnL8N8ObY+sof3YIdjucMWnOQZreqcxwweTyNZAuD+RSQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"17136-size.png\"\n        title=\"17136-size.png\"\n        src=\"/static/79f4837b71964b9a6adc9c10a3cb3eed/37523/17136-size.png\"\n        srcset=\"/static/79f4837b71964b9a6adc9c10a3cb3eed/e9ff0/17136-size.png 180w,\n/static/79f4837b71964b9a6adc9c10a3cb3eed/f21e7/17136-size.png 360w,\n/static/79f4837b71964b9a6adc9c10a3cb3eed/37523/17136-size.png 720w,\n/static/79f4837b71964b9a6adc9c10a3cb3eed/302a4/17136-size.png 1080w,\n/static/79f4837b71964b9a6adc9c10a3cb3eed/07a9c/17136-size.png 1440w,\n/static/79f4837b71964b9a6adc9c10a3cb3eed/10d53/17136-size.png 1724w\"\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>색종이를 크기가 10×10인 종이 위에 붙이려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 0 또는 1이 적혀 있다. 1이 적힌 칸은 모두 색종이로 덮여져야 한다. 색종이를 붙일 때는 종이의 경계 밖으로 나가서는 안되고, 겹쳐도 안 된다. 또, 칸의 경계와 일치하게 붙여야 한다. 0이 적힌 칸에는 색종이가 있으면 안 된다.</p>\n<p>종이가 주어졌을 때, 1이 적힌 모든 칸을 붙이는데 필요한 색종이의 최소 개수를 구해보자.</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>총 10개의 줄에 종이의 각 칸에 적힌 수가 주어진다.</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>모든 1을 덮는데 필요한 색종이의 최소 개수를 출력한다. 1을 모두 덮는 것이 불가능한 경우에는 -1을 출력한다.</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, Backtracking</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\">check_attach</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    arr <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token comment\"># 1부터 5까지 크기별 색종이 전부 확인</span>\n    <span class=\"token keyword\">for</span> k <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> <span class=\"token number\">6</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</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>k<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>k<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                <span class=\"token comment\"># 범위에 벗어나거나 0을 만나서 색종이를 붙일 수 없는 경우</span>\n                <span class=\"token keyword\">if</span> y<span class=\"token operator\">+</span>i <span class=\"token operator\">>=</span> <span class=\"token number\">10</span> <span class=\"token keyword\">or</span> x<span class=\"token operator\">+</span>j <span class=\"token operator\">>=</span> <span class=\"token number\">10</span> <span class=\"token keyword\">or</span> field<span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n                    <span class=\"token keyword\">return</span> arr\n        arr<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>k<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> arr</code></pre></div>\n<ul>\n<li>붙일 수 있는 색종이 계산하는 함수\n<ul>\n<li><strong>1부터 5까지 크기별 색종이 전부 확인</strong><br>\n<strong>1부터 5까지</strong> 크기별 색종이들을 붙일 수 있는지 확인하고,<br>\n붙일 수 있으면 해당 크기 <code class=\"language-text\">k</code>를 <code class=\"language-text\">arr</code> 리스트에 <strong>append</strong></li>\n<li><strong>범위에 벗어나거나 0을 만나서 색종이를 붙일 수 없는 경우</strong><br>\n<strong>범위</strong>에 벗어나거나 <strong>0</strong>을 만나는 경우에는 색종이를 붙일 수 없고,<br>\n더 큰 크기의 색종이도 붙일 수 없기 때문에 바로 <code class=\"language-text\">arr</code> 리스트 <strong>return</strong></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\"><span class=\"token keyword\">def</span> <span class=\"token function\">search</span><span class=\"token punctuation\">(</span>one_cnt<span class=\"token punctuation\">,</span> cnt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">global</span> result<span class=\"token punctuation\">,</span> paper_cnt\n    <span class=\"token comment\"># 1을 전부 덮은 경우, 최소 result 계산</span>\n    <span class=\"token keyword\">if</span> one_cnt <span class=\"token operator\">==</span> <span class=\"token number\">0</span><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> cnt<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</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\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token comment\"># 1인 경우 붙일 수 있는 색종이 확인</span>\n            <span class=\"token keyword\">if</span> field<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 number\">1</span><span class=\"token punctuation\">:</span>\n                arr <span class=\"token operator\">=</span> check_attach<span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">,</span> j<span class=\"token punctuation\">)</span>\n                <span class=\"token keyword\">for</span> n <span class=\"token keyword\">in</span> arr<span class=\"token punctuation\">:</span>\n                    <span class=\"token comment\"># 해당 색종이가 남아 있으면 계산 후 재귀</span>\n                    <span class=\"token keyword\">if</span> paper_cnt<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 operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n                        paper_cnt<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 operator\">-=</span> <span class=\"token number\">1</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>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\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>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                                field<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token operator\">+</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n                        search<span class=\"token punctuation\">(</span>one_cnt <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span>n <span class=\"token operator\">**</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> cnt <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n                        paper_cnt<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 operator\">+=</span> <span class=\"token number\">1</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>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\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>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                                field<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token operator\">+</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n                <span class=\"token keyword\">return</span></code></pre></div>\n<ul>\n<li>색종이를 최소한으로 붙일 수 있는 방법을 탐색하는 함수\n<ul>\n<li><strong>1을 전부 덮은 경우</strong><br>\n<code class=\"language-text\">result</code>와 <code class=\"language-text\">cnt</code> 사이의 최솟값 계산해서 <code class=\"language-text\">result</code>에 저장 후, <strong>return</strong></li>\n<li><strong>1인 경우 붙일 수 있는 색종이 확인</strong>\n<code class=\"language-text\">field</code> 값이 <strong>1</strong>인 경우에는 <code class=\"language-text\">check_attach()</code> 함수를 이용해서 붙일 수 있는 색종이를 <code class=\"language-text\">arr</code> 리스트로 받아오고,<br>\n붙일 수 있는 색종이마다 해당 색종이가 남아 있는지 확인하고,<br>\n남아 있으면 해당 <code class=\"language-text\">paper_cnt</code>를 하나 감소시키고 <code class=\"language-text\">field</code> 값을 <strong>0</strong>으로 바꾼 뒤 <strong>재귀</strong><br>\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\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">check_attach</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    arr <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token comment\"># 1부터 5까지 크기별 색종이 전부 확인</span>\n    <span class=\"token keyword\">for</span> k <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> <span class=\"token number\">6</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</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>k<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>k<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                <span class=\"token comment\"># 범위에 벗어나거나 0을 만나서 색종이를 붙일 수 없는 경우</span>\n                <span class=\"token keyword\">if</span> y<span class=\"token operator\">+</span>i <span class=\"token operator\">>=</span> <span class=\"token number\">10</span> <span class=\"token keyword\">or</span> x<span class=\"token operator\">+</span>j <span class=\"token operator\">>=</span> <span class=\"token number\">10</span> <span class=\"token keyword\">or</span> field<span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n                    <span class=\"token keyword\">return</span> arr\n        arr<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>k<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> arr\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">search</span><span class=\"token punctuation\">(</span>one_cnt<span class=\"token punctuation\">,</span> cnt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">global</span> result<span class=\"token punctuation\">,</span> paper_cnt\n    <span class=\"token comment\"># 1을 전부 덮은 경우, 최소 result 계산</span>\n    <span class=\"token keyword\">if</span> one_cnt <span class=\"token operator\">==</span> <span class=\"token number\">0</span><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> cnt<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</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\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token comment\"># 1인 경우 붙일 수 있는 색종이 확인</span>\n            <span class=\"token keyword\">if</span> field<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 number\">1</span><span class=\"token punctuation\">:</span>\n                arr <span class=\"token operator\">=</span> check_attach<span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">,</span> j<span class=\"token punctuation\">)</span>\n                <span class=\"token keyword\">for</span> n <span class=\"token keyword\">in</span> arr<span class=\"token punctuation\">:</span>\n                    <span class=\"token comment\"># 해당 색종이가 남아 있으면 계산 후 재귀</span>\n                    <span class=\"token keyword\">if</span> paper_cnt<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 operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n                        paper_cnt<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 operator\">-=</span> <span class=\"token number\">1</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>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\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>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                                field<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token operator\">+</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n                        search<span class=\"token punctuation\">(</span>one_cnt <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span>n <span class=\"token operator\">**</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> cnt <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n                        paper_cnt<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 operator\">+=</span> <span class=\"token number\">1</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>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\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>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                                field<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token operator\">+</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n                <span class=\"token keyword\">return</span>\n\nfield <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><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\npaper_cnt <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">]</span>\none_cnt<span class=\"token punctuation\">,</span> result <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> sys<span class=\"token punctuation\">.</span>maxsize\n\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\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> field<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 number\">1</span><span class=\"token punctuation\">:</span>\n            one_cnt <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\nsearch<span class=\"token punctuation\">(</span>one_cnt<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">if</span> result <span class=\"token operator\">==</span> sys<span class=\"token punctuation\">.</span>maxsize<span class=\"token punctuation\">:</span>\n    result <span class=\"token operator\">=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</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<hr>\n<h2 id=\"-review\" style=\"position:relative;\"><a href=\"#-review\" aria-label=\" review permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>📝 Review</h2>\n<p>처음에는 제일 큰 색종이부터 붙이면 되겠지라고 생각하고 그리디 방식으로 풀려고 했는데 아니었다…<br>\n백트래킹 방식으로 풀어야 되는걸 알고나서 재귀로 풀려고 했는데 감이 안잡혀서 몇몇 힌트를 참고했다,,<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/17136 <그림 1>과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다.  색종이를 크기가 10×10인 종이 위에 붙이려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 0 또는 1이 적혀 있다. 1이 적힌 칸은 모두 색종이로 덮여져야 한다. 색종이를 붙일 때는 종이의 경계 밖으로 나가서는 안되고, 겹쳐도 안 된다. 또, 칸의 경계와 일치하게 붙여야 한다. 0이 적힌 칸에는 색종이가 있으면 안 된다. 종이가 주어졌을 때, 1이 적힌 모든 칸을 붙이는데 필요한 색종이의 최소 개수를 구해보자. 입력 총 10개의 줄에 종이의 각 칸에 적힌 수가 주어진다. 출력 모든 1을 덮는데 필요한 색종이의 최소 개수를 출력한다. 1을 모두 덮는 것이 불가능한 경우에는 -1을 출력한다. …","frontmatter":{"date":"March 15, 2022","title":"[BOJ] 17136번: 색종이 붙이기 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/boj-17136/"}},"next":{"id":"b41cc085-83d3-55ee-afef-f4b8aa461482","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/16637\">https://www.acmicpc.net/problem/16637</a></p>\n<p>길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -, ×)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순서대로 계산해야 한다. 예를 들어, 3+8×7-9×2의 결과는 136이다.</p>\n<p>수식에 괄호를 추가하면, 괄호 안에 들어있는 식은 먼저 계산해야 한다. 단, 괄호 안에는 연산자가 하나만 들어 있어야 한다. 예를 들어, 3+8×7-9×2에 괄호를 3+(8×7)-(9×2)와 같이 추가했으면, 식의 결과는 41이 된다. 하지만, 중첩된 괄호는 사용할 수 없다. 즉, 3+((8×7)-9)×2, 3+((8×7)-(9×2))은 모두 괄호 안에 괄호가 있기 때문에, 올바른 식이 아니다.</p>\n<p>수식이 주어졌을 때, 괄호를 적절히 추가해 만들 수 있는 식의 결과의 최댓값을 구하는 프로그램을 작성하시오. 추가하는 괄호 개수의 제한은 없으며, 추가하지 않아도 된다.</p>\n<hr>\n<h2 id=\"입력\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EB%A0%A5\" aria-label=\"입력 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>입력</h2>\n<p>첫째 줄에 수식의 길이 N(1 ≤ N ≤ 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가 번갈아가면서 나온다. 연산자는 +, -, * 중 하나이다. 여기서 *는 곱하기 연산을 나타내는 × 연산이다. 항상 올바른 수식만 주어지기 때문에, N은 홀수이다.</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>첫째 줄에 괄호를 적절히 추가해서 얻을 수 있는 결과의 최댓값을 출력한다. 정답은 2^31보다 작고, -2^31보다 크다.</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\">prior_cal</span><span class=\"token punctuation\">(</span>comb<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    cnt<span class=\"token punctuation\">,</span> new_num<span class=\"token punctuation\">,</span> new_operator<span class=\"token punctuation\">,</span> check <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">False</span>\n    temp <span class=\"token operator\">=</span> copy<span class=\"token punctuation\">.</span>deepcopy<span class=\"token punctuation\">(</span>copy_num<span class=\"token punctuation\">)</span>\n    <span class=\"token comment\"># 조합에 따라 계산</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> comb<span class=\"token punctuation\">:</span>\n        first<span class=\"token punctuation\">,</span> second <span class=\"token operator\">=</span> copy_num<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> copy_num<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n        cnt<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span>\n        cnt<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 연산자에 맞게 계산</span>\n        <span class=\"token keyword\">if</span> copy_operator<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"+\"</span><span class=\"token punctuation\">:</span> temp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">+</span> second\n        <span class=\"token keyword\">elif</span> copy_operator<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"-\"</span><span class=\"token punctuation\">:</span> temp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">-</span> second\n        <span class=\"token keyword\">elif</span> copy_operator<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"*\"</span><span class=\"token punctuation\">:</span> temp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">*</span> second\n    <span class=\"token comment\"># 계산 완료된 새로운 num 리스트 생성</span>\n    <span class=\"token keyword\">for</span> i<span class=\"token punctuation\">,</span> n <span class=\"token keyword\">in</span> <span class=\"token builtin\">enumerate</span><span class=\"token punctuation\">(</span>copy_num<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token comment\"># 계산에 사용되지 않은 숫자면 그대로 추가</span>\n        <span class=\"token keyword\">if</span> i <span class=\"token keyword\">not</span> <span class=\"token keyword\">in</span> cnt<span class=\"token punctuation\">:</span>\n            new_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 계산에 사용됐으면 계산 완료된 숫자 한번만 추가</span>\n        <span class=\"token keyword\">elif</span> <span class=\"token keyword\">not</span> check<span class=\"token punctuation\">:</span>\n            new_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n            check <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n        <span class=\"token keyword\">elif</span> check<span class=\"token punctuation\">:</span>\n            check <span class=\"token operator\">=</span> <span class=\"token boolean\">False</span>\n    <span class=\"token comment\"># 새로운 operator 리스트도 생성</span>\n    <span class=\"token keyword\">for</span> i<span class=\"token punctuation\">,</span> op <span class=\"token keyword\">in</span> <span class=\"token builtin\">enumerate</span><span class=\"token punctuation\">(</span>copy_operator<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> i <span class=\"token keyword\">not</span> <span class=\"token keyword\">in</span> comb<span class=\"token punctuation\">:</span>\n            new_operator<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>op<span class=\"token punctuation\">)</span>\n    return_list <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>new_num<span class=\"token punctuation\">,</span> new_operator<span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">return</span> return_list</code></pre></div>\n<ul>\n<li>조합에 맞게 괄호 계산하는 함수\n<ul>\n<li><strong>조합에 따라 계산</strong><br>\n조합에 맞게 우선 계산할 숫자 두개를 <code class=\"language-text\">first</code>, <code class=\"language-text\">second</code>에 저장하고, 해당 <strong>index</strong>들은 <code class=\"language-text\">cnt</code>에 <strong>append</strong><br>\n연산자에 맞게 계산 후, <code class=\"language-text\">temp</code>에 저장</li>\n<li><strong>계산 완료된 새로운 num 리스트 생성</strong><br>\n<code class=\"language-text\">cnt</code>에 있는 <strong>index</strong>인지 확인해서 계산에 사용되지 않은 수자면 그대로 <strong>append</strong><br>\n계산에 사용됐으면 <code class=\"language-text\">check</code>를 이용해서 계산 완료된 숫자를 한번만 <strong>append</strong></li>\n<li><strong>새로운 operator 리스트도 생성</strong><br>\n사용된 연산자를 뺀 새로운 operator 리스트를 생성한 후,<br>\n새로운 <code class=\"language-text\">new_num</code>, <code class=\"language-text\">new_operator</code> 리스트를 <strong>return</strong></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\"><span class=\"token keyword\">def</span> <span class=\"token function\">cal</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># 남은 연산자들에 맞게 전부 다 계산</span>\n    <span class=\"token keyword\">while</span> copy_operator<span class=\"token punctuation\">:</span>\n        first<span class=\"token punctuation\">,</span> second <span class=\"token operator\">=</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">if</span> copy_operator<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"+\"</span><span class=\"token punctuation\">:</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">+</span> second\n        <span class=\"token keyword\">elif</span> copy_operator<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"-\"</span><span class=\"token punctuation\">:</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">-</span> second\n        <span class=\"token keyword\">elif</span> copy_operator<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"*\"</span><span class=\"token punctuation\">:</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">*</span> second\n        <span class=\"token keyword\">del</span> copy_operator<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">del</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">return</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span></code></pre></div>\n<ul>\n<li>남은 식들 계산하는 함수\n<ul>\n<li><strong>남은 연산자들에 맞게 전부 다 계산</strong><br>\n남은 연산자가 없을 때까지 연산자에 맞게 계산해주고,<br>\n계산 완료된 <code class=\"language-text\">copy_num[0]</code>을 <strong>return</strong></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\">N <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>\nexp <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nnum<span class=\"token punctuation\">,</span> operator<span class=\"token punctuation\">,</span> result <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span>sys<span class=\"token punctuation\">.</span>maxsize\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><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>exp<span class=\"token punctuation\">)</span><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> i <span class=\"token operator\">%</span> <span class=\"token number\">2</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>exp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span> operator<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>exp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># 연산자 없이 숫자 하나만 있을 때, 예외 처리</span>\n<span class=\"token keyword\">if</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>operator<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> result <span class=\"token operator\">=</span> num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\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><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>operator<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    comb_list <span class=\"token operator\">=</span> combinations<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> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>operator<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> comb <span class=\"token keyword\">in</span> comb_list<span class=\"token punctuation\">:</span>\n        comb <span class=\"token operator\">=</span> <span class=\"token builtin\">list</span><span class=\"token punctuation\">(</span>comb<span class=\"token punctuation\">)</span>\n        check <span class=\"token operator\">=</span> <span class=\"token boolean\">False</span>\n        <span class=\"token comment\"># 괄호가 연속되는지 확인하고, 연속되면 continue</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>comb<span class=\"token punctuation\">)</span><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> comb<span class=\"token punctuation\">[</span>j<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> comb<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n                check <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n                <span class=\"token keyword\">break</span>\n        <span class=\"token keyword\">if</span> check<span class=\"token punctuation\">:</span> <span class=\"token keyword\">continue</span>\n        copy_num<span class=\"token punctuation\">,</span> copy_operator <span class=\"token operator\">=</span> copy<span class=\"token punctuation\">.</span>deepcopy<span class=\"token punctuation\">(</span>num<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> copy<span class=\"token punctuation\">.</span>deepcopy<span class=\"token punctuation\">(</span>operator<span class=\"token punctuation\">)</span>\n        temp <span class=\"token operator\">=</span> prior_cal<span class=\"token punctuation\">(</span>comb<span class=\"token punctuation\">)</span>\n        copy_num<span class=\"token punctuation\">,</span> copy_operator <span class=\"token operator\">=</span> temp<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> temp<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n        result <span class=\"token operator\">=</span> <span class=\"token builtin\">max</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">,</span> cal<span class=\"token punctuation\">(</span><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><code class=\"language-text\">exp</code> 문자열을 <code class=\"language-text\">num</code>, <code class=\"language-text\">operator</code>로 분리</li>\n<li>연산자 없이 숫자 하나만 있을 때는 바로 값을 출력하도록 예외 처리</li>\n<li>연산자 수에 맞게 조합을 이용해 가능한 조합 경우의 수를 다 만들고,</li>\n<li>가능한 경우의 수에 맞게 <code class=\"language-text\">prior_cal()</code> 함수 실행</li>\n<li>이 때, 괄호가 연속되는지 확인하고, 연속되면 함수 실행하기 전에 <strong>continue</strong></li>\n<li>다음으로는 남은 식들 계산하는 <code class=\"language-text\">cal()</code> 함수 실행한 후,</li>\n<li>각 조합마다 <strong>max</strong> 값을 <code class=\"language-text\">result</code>에 저장하고 출력한다.</li>\n</ul>\n<hr>\n<h2 id=\"-code\" style=\"position:relative;\"><a href=\"#-code\" aria-label=\" code permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>🧩 Code</h2>\n<details><summary>전체 코드 확인</summary>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> sys<span class=\"token punctuation\">,</span> copy\n<span class=\"token keyword\">from</span> itertools <span class=\"token keyword\">import</span> combinations\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">prior_cal</span><span class=\"token punctuation\">(</span>comb<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    cnt<span class=\"token punctuation\">,</span> new_num<span class=\"token punctuation\">,</span> new_operator<span class=\"token punctuation\">,</span> check <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">False</span>\n    temp <span class=\"token operator\">=</span> copy<span class=\"token punctuation\">.</span>deepcopy<span class=\"token punctuation\">(</span>copy_num<span class=\"token punctuation\">)</span>\n    <span class=\"token comment\"># 조합에 따라 계산</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> comb<span class=\"token punctuation\">:</span>\n        first<span class=\"token punctuation\">,</span> second <span class=\"token operator\">=</span> copy_num<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> copy_num<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n        cnt<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span>\n        cnt<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 연산자에 맞게 계산</span>\n        <span class=\"token keyword\">if</span> copy_operator<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"+\"</span><span class=\"token punctuation\">:</span> temp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">+</span> second\n        <span class=\"token keyword\">elif</span> copy_operator<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"-\"</span><span class=\"token punctuation\">:</span> temp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">-</span> second\n        <span class=\"token keyword\">elif</span> copy_operator<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"*\"</span><span class=\"token punctuation\">:</span> temp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">*</span> second\n    <span class=\"token comment\"># 계산 완료된 새로운 num 리스트 생성</span>\n    <span class=\"token keyword\">for</span> i<span class=\"token punctuation\">,</span> n <span class=\"token keyword\">in</span> <span class=\"token builtin\">enumerate</span><span class=\"token punctuation\">(</span>copy_num<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token comment\"># 계산에 사용되지 않은 숫자면 그대로 추가</span>\n        <span class=\"token keyword\">if</span> i <span class=\"token keyword\">not</span> <span class=\"token keyword\">in</span> cnt<span class=\"token punctuation\">:</span>\n            new_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># 계산에 사용됐으면 계산 완료된 숫자 한번만 추가</span>\n        <span class=\"token keyword\">elif</span> <span class=\"token keyword\">not</span> check<span class=\"token punctuation\">:</span>\n            new_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n            check <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n        <span class=\"token keyword\">elif</span> check<span class=\"token punctuation\">:</span>\n            check <span class=\"token operator\">=</span> <span class=\"token boolean\">False</span>\n    <span class=\"token comment\"># 새로운 operator 리스트도 생성</span>\n    <span class=\"token keyword\">for</span> i<span class=\"token punctuation\">,</span> op <span class=\"token keyword\">in</span> <span class=\"token builtin\">enumerate</span><span class=\"token punctuation\">(</span>copy_operator<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> i <span class=\"token keyword\">not</span> <span class=\"token keyword\">in</span> comb<span class=\"token punctuation\">:</span>\n            new_operator<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>op<span class=\"token punctuation\">)</span>\n    return_list <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>new_num<span class=\"token punctuation\">,</span> new_operator<span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">return</span> return_list\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">cal</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># 남은 연산자들에 맞게 전부 다 계산</span>\n    <span class=\"token keyword\">while</span> copy_operator<span class=\"token punctuation\">:</span>\n        first<span class=\"token punctuation\">,</span> second <span class=\"token operator\">=</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">if</span> copy_operator<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"+\"</span><span class=\"token punctuation\">:</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">+</span> second\n        <span class=\"token keyword\">elif</span> copy_operator<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"-\"</span><span class=\"token punctuation\">:</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">-</span> second\n        <span class=\"token keyword\">elif</span> copy_operator<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"*\"</span><span class=\"token punctuation\">:</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> first <span class=\"token operator\">*</span> second\n        <span class=\"token keyword\">del</span> copy_operator<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">del</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">return</span> copy_num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n\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>\nexp <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nnum<span class=\"token punctuation\">,</span> operator<span class=\"token punctuation\">,</span> result <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span>sys<span class=\"token punctuation\">.</span>maxsize\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><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>exp<span class=\"token punctuation\">)</span><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> i <span class=\"token operator\">%</span> <span class=\"token number\">2</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>exp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span> operator<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>exp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># 연산자없이 숫자 하나만 있을 때, 예외 처리</span>\n<span class=\"token keyword\">if</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>operator<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> result <span class=\"token operator\">=</span> num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\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><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>operator<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    comb_list <span class=\"token operator\">=</span> combinations<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> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>operator<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> comb <span class=\"token keyword\">in</span> comb_list<span class=\"token punctuation\">:</span>\n        comb <span class=\"token operator\">=</span> <span class=\"token builtin\">list</span><span class=\"token punctuation\">(</span>comb<span class=\"token punctuation\">)</span>\n        check <span class=\"token operator\">=</span> <span class=\"token boolean\">False</span>\n        <span class=\"token comment\"># 괄호가 연속되는지 확인하고, 연속되면 continue</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>comb<span class=\"token punctuation\">)</span><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> comb<span class=\"token punctuation\">[</span>j<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> comb<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n                check <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n                <span class=\"token keyword\">break</span>\n        <span class=\"token keyword\">if</span> check<span class=\"token punctuation\">:</span> <span class=\"token keyword\">continue</span>\n        copy_num<span class=\"token punctuation\">,</span> copy_operator <span class=\"token operator\">=</span> copy<span class=\"token punctuation\">.</span>deepcopy<span class=\"token punctuation\">(</span>num<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> copy<span class=\"token punctuation\">.</span>deepcopy<span class=\"token punctuation\">(</span>operator<span class=\"token punctuation\">)</span>\n        temp <span class=\"token operator\">=</span> prior_cal<span class=\"token punctuation\">(</span>comb<span class=\"token punctuation\">)</span>\n        copy_num<span class=\"token punctuation\">,</span> copy_operator <span class=\"token operator\">=</span> temp<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> temp<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n        result <span class=\"token operator\">=</span> <span class=\"token builtin\">max</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">,</span> cal<span class=\"token punctuation\">(</span><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<hr>\n<h2 id=\"-review\" style=\"position:relative;\"><a href=\"#-review\" aria-label=\" review permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>📝 Review</h2>\n<p>지금까지 했던 문제들처럼 조합을 이용해서 쉽게 해결방법을 생각해낼 수 있었다.<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":"March 06, 2022","title":"[BOJ] 16637번: 괄호 추가하기 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/boj-16637/"}},"prev":{"id":"9b9f488f-897b-5b25-9a02-60a6b4dc4571","html":"<h2 id=\"-기본-검색-query\" style=\"position:relative;\"><a href=\"#-%EA%B8%B0%EB%B3%B8-%EA%B2%80%EC%83%89-query\" aria-label=\" 기본 검색 query 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>🔍 기본 검색 Query</h2>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">SELECT</span>      <span class=\"token operator\">&lt;</span>attribute list<span class=\"token operator\">></span>\n<span class=\"token keyword\">FROM</span>        <span class=\"token operator\">&lt;</span>relation list<span class=\"token operator\">></span>\n<span class=\"token punctuation\">[</span> <span class=\"token keyword\">WHERE</span>     <span class=\"token operator\">&lt;</span>condition<span class=\"token operator\">></span> <span class=\"token punctuation\">]</span>\n<span class=\"token comment\">-- for aggregates</span>\n<span class=\"token punctuation\">[</span> <span class=\"token keyword\">GROUP</span> <span class=\"token keyword\">BY</span>  <span class=\"token operator\">&lt;</span>attribute list<span class=\"token operator\">></span> <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">[</span> <span class=\"token keyword\">HAVING</span>    <span class=\"token operator\">&lt;</span>condition<span class=\"token operator\">></span> <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">[</span> <span class=\"token keyword\">ORDER</span> <span class=\"token keyword\">BY</span>  <span class=\"token operator\">&lt;</span>attribute list<span class=\"token operator\">></span> <span class=\"token punctuation\">[</span><span class=\"token keyword\">DESC</span><span class=\"token punctuation\">]</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"select-문\" style=\"position:relative;\"><a href=\"#select-%EB%AC%B8\" aria-label=\"select 문 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>SELECT 문</h3>\n<p>데이터베이스에서 정보 <strong>검색</strong>을 하는데 가장 기본이 되는 구문으로, <code class=\"language-text\">SELECT-FROM-WHERE</code> 형태가 기본적인 형태다.</p>\n<blockquote>\n<p><strong>relational algebra</strong>에서 <strong>selection</strong>과는 다름</p>\n</blockquote>\n<p>ex)</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">SELECT</span> Name\n<span class=\"token keyword\">FROM</span> Employee\n<span class=\"token keyword\">WHERE</span> Age <span class=\"token operator\">>=</span> <span class=\"token number\">20</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"aliasing--renaming\" style=\"position:relative;\"><a href=\"#aliasing--renaming\" aria-label=\"aliasing  renaming 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>Aliasing / Renaming</h3>\n<p>두 개 이상의 attribute들이 서로 이름이 같은 경우에는 다음과 같이 이름을 바꾸거나 명시해 표현할 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">SELECT</span> E<span class=\"token punctuation\">.</span>Fname<span class=\"token punctuation\">,</span> E<span class=\"token punctuation\">.</span>Lname<span class=\"token punctuation\">,</span> S<span class=\"token punctuation\">.</span>Fname<span class=\"token punctuation\">,</span> S<span class=\"token punctuation\">.</span>Lname\n<span class=\"token keyword\">FROM</span> EMPLOYEE <span class=\"token punctuation\">(</span><span class=\"token keyword\">AS</span><span class=\"token punctuation\">)</span> E<span class=\"token punctuation\">,</span> EMPLOYEE <span class=\"token punctuation\">(</span><span class=\"token keyword\">AS</span><span class=\"token punctuation\">)</span> S\n<span class=\"token keyword\">WHERE</span> E<span class=\"token punctuation\">.</span>Super_ssn <span class=\"token operator\">=</span> S<span class=\"token punctuation\">.</span>ssn<span class=\"token punctuation\">;</span></code></pre></div>\n<blockquote>\n<p>SQL 질의는 데이터를 검색할 때, <strong>“어떻게”</strong> 가 아닌 <strong>“어떤”</strong> 데이터를 검색하기 원하는지 기술하기 때문에 <strong>비절차적(non-procedural)</strong> 이고, <strong>선언적(declarative)</strong> 이다.</p>\n</blockquote>\n<hr>\n<h2 id=\"-sql-집합-연산자\" style=\"position:relative;\"><a href=\"#-sql-%EC%A7%91%ED%95%A9-%EC%97%B0%EC%82%B0%EC%9E%90\" 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<p><strong>SQL은 중복된 튜플을 제거하지 않는다.</strong></p>\n<ol>\n<li>중복 제거는 비용이 많이 든다.</li>\n<li>사용자가 쿼리 결과에서 중복 튜플을 보기 원할 수도 있다.</li>\n<li>집계 함수(sum, avg, max, distinct, …)를 사용할 때 대부분 중복 제거를 원하지 않는다.</li>\n</ol>\n<p>중복 제거를 원한다면 다음과 같이 <code class=\"language-text\">DISTINCT</code>를 사용할 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">SELECT</span> <span class=\"token keyword\">DISTINCT</span> Salary\n<span class=\"token keyword\">FROM</span> EMPLOYEE<span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"set-연산자\" style=\"position:relative;\"><a href=\"#set-%EC%97%B0%EC%82%B0%EC%9E%90\" aria-label=\"set 연산자 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>Set 연산자</h3>\n<p><strong>UNION</strong> (합집합) / <strong>EXCEPT</strong> (차집합) / <strong>INTERSECT</strong> (교집합)\nSet 연산자를 사용하기 위해서는 두 테이블이 <strong>Type-compatible</strong> 해야 한다.</p>\n<blockquote>\n<p><strong>Type-compatible</strong></p>\n<ol>\n<li>두 relation은 같은 attribute를 가져야 함</li>\n<li>attribute는 두 relation에서 같은 순서로 나타나야 함</li>\n</ol>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token punctuation\">(</span>\n  <span class=\"token keyword\">SELECT</span> <span class=\"token keyword\">DISTINCT</span> Pnumber\n  <span class=\"token keyword\">FROM</span> PROJECT<span class=\"token punctuation\">,</span> WORKS_ON<span class=\"token punctuation\">,</span> EMPLOYEE\n  <span class=\"token keyword\">WHERE</span> Pnumber <span class=\"token operator\">=</span> Pno <span class=\"token operator\">AND</span> Essn <span class=\"token operator\">=</span> Ssn <span class=\"token operator\">AND</span> Lname <span class=\"token operator\">=</span> <span class=\"token string\">'Smith'</span>\n<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">UNION</span>\n<span class=\"token punctuation\">(</span>\n  <span class=\"token keyword\">SELECT</span> <span class=\"token keyword\">DISTINCT</span> Pnumber\n  <span class=\"token keyword\">FROM</span> PROJECT<span class=\"token punctuation\">,</span> DEPARTMENT<span class=\"token punctuation\">,</span> EMPLOYEE\n  <span class=\"token keyword\">WHERE</span> Dnum <span class=\"token operator\">=</span> Dnumber <span class=\"token operator\">AND</span> Mgr_ssn <span class=\"token operator\">=</span> Ssn <span class=\"token operator\">AND</span> Lname <span class=\"token operator\">=</span> <span class=\"token string\">'Smith'</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<hr>\n<h2 id=\"-sql-추가-기능\" style=\"position:relative;\"><a href=\"#-sql-%EC%B6%94%EA%B0%80-%EA%B8%B0%EB%8A%A5\" 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<h3 id=\"substring-pattern-matching\" style=\"position:relative;\"><a href=\"#substring-pattern-matching\" aria-label=\"substring pattern matching 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>Substring Pattern Matching</h3>\n<p><code class=\"language-text\">LIKE</code> 비교 연산자</p>\n<ul>\n<li><strong>%</strong> : 0개 이상의 문자를 대체\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">SELECT</span> Fname<span class=\"token punctuation\">,</span> Lname\n<span class=\"token keyword\">FROM</span> EMPLOYEE\n<span class=\"token keyword\">WHERE</span> Address <span class=\"token operator\">LIKE</span> <span class=\"token string\">'%Houston, TX%'</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n<li><strong>_</strong> : 1개 문자를 대체\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">SELECT</span> Fname<span class=\"token punctuation\">,</span> Lname\n<span class=\"token keyword\">FROM</span> EMPLOYEE\n<span class=\"token keyword\">WHERE</span> Bdate <span class=\"token operator\">LIKE</span> <span class=\"token string\">'199_____-1______'</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n</ul>\n<h3 id=\"산술-연산자\" style=\"position:relative;\"><a href=\"#%EC%82%B0%EC%88%A0-%EC%97%B0%EC%82%B0%EC%9E%90\" 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>산술 연산자</h3>\n<ul>\n<li><strong>표준 산술 연산자</strong> : +, -, *, /</li>\n<li><code class=\"language-text\">BETWEEN</code> 비교 연산자\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">SELECT</span> <span class=\"token operator\">*</span>\n<span class=\"token keyword\">FROM</span> EMPLOYEE\n<span class=\"token keyword\">WHERE</span> <span class=\"token punctuation\">(</span>Salary <span class=\"token operator\">BETWEEN</span> <span class=\"token number\">30000</span> <span class=\"token operator\">AND</span> <span class=\"token number\">40000</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">AND</span> Dno <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">;</span></code></pre></div>\n</li>\n</ul>\n<h3 id=\"질의-결과-정렬\" style=\"position:relative;\"><a href=\"#%EC%A7%88%EC%9D%98-%EA%B2%B0%EA%B3%BC-%EC%A0%95%EB%A0%AC\" 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>질의 결과 정렬</h3>\n<p><code class=\"language-text\">ORDER BY</code> 절</p>\n<ul>\n<li><strong>DESC</strong> : attribute 값들을 내림차순으로 결과 정렬</li>\n<li><strong>ASC</strong> : attribute 값들을 오름차순으로 결과 정렬</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token punctuation\">[</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">ORDER</span> <span class=\"token keyword\">BY</span> D<span class=\"token punctuation\">.</span>Dname <span class=\"token keyword\">DESC</span><span class=\"token punctuation\">,</span> E<span class=\"token punctuation\">.</span>Lname <span class=\"token keyword\">ASC</span><span class=\"token punctuation\">,</span> E<span class=\"token punctuation\">.</span>Fname <span class=\"token keyword\">ASC</span><span class=\"token punctuation\">;</span></code></pre></div>\n<hr>\n<h2 id=\"-insert-문\" style=\"position:relative;\"><a href=\"#-insert-%EB%AC%B8\" aria-label=\" insert 문 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>✔ INSERT 문</h2>\n<p>relation에 tuple을 <strong>추가</strong>하기 위해 사용</p>\n<ul>\n<li>attribute 값은 <code class=\"language-text\">CREATE TABLE</code>문에 지정된 attribute와 같은 순서로 나열되어야 한다.</li>\n<li>데이터 타입에 대한 <strong>제약 조건</strong>은 자동으로 작동하여, 잘못된 값이 들어오면 거부된다.</li>\n<li>DDL문으로서 <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\">INSERT</span> <span class=\"token keyword\">INTO</span> EMPLOYEE <span class=\"token punctuation\">(</span>Fname<span class=\"token punctuation\">,</span> Lname<span class=\"token punctuation\">,</span> Dno<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">VALUES</span> <span class=\"token punctuation\">(</span><span class=\"token string\">'Fernando'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Tatis'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>위 예시와 같이 원하는 attribute 값만 명시하여 INSERT문을 작성할 수 있다.<br>\n(=> 명시되지 않은 값들은 <strong>DEFAULT</strong> 또는 <strong>NULL</strong>로 설정됨)<br>\nattribute 값을 명시하지 않을 경우, <strong>NULL</strong>을 포함한 모든 값을 작성해야 한다.</p>\n<hr>\n<h2 id=\"-delete-문\" style=\"position:relative;\"><a href=\"#-delete-%EB%AC%B8\" aria-label=\" delete 문 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>❌ DELETE 문</h2>\n<p>조건에 맞는 relation에서 tuple을 삭제하기 위해 사용</p>\n<ul>\n<li><code class=\"language-text\">WHERE</code> 절의 조건에 만족하는 tuple을 선택해 제거한다.</li>\n<li>tuple은 한 번에 하나의 테이블에서만 삭제된다.</li>\n<li><strong>참조 무결성</strong>이 지켜져야한다.</li>\n<li><code class=\"language-text\">CASCADE</code>가 <strong>참조 무결성 제약조건</strong>에 설정되어 있으면, 삭제할 tuple을 참조하는 모든 tuple이 삭제된다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">DELETE</span> <span class=\"token keyword\">FROM</span> EMPLOYEE\n<span class=\"token keyword\">WHERE</span> Dno <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">;</span></code></pre></div>\n<hr>\n<h2 id=\"-update-문\" style=\"position:relative;\"><a href=\"#-update-%EB%AC%B8\" aria-label=\" update 문 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>✂ UPDATE 문</h2>\n<p>조건에 맞는 relation에서 tuple을 업데이트하기 위해 사용</p>\n<ul>\n<li><code class=\"language-text\">WHERE</code> 절의 조건에 만족하는 tuple을 선택한다.</li>\n<li><code class=\"language-text\">SET</code> 절은 수정할 attribute와 그 값을 지정한다.</li>\n<li>이런 트리거 작업이 <strong>참조 무결성 제약조건</strong>에 설정되어 있으면, <strong>Primary Key</strong> 값 업데이트는 다른 테이블에 있는 tuple의 <strong>Foreign Key</strong> 값으로 전파될 수 있다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">UPDATE</span> EMPLOYEE E\n<span class=\"token keyword\">SET</span> E<span class=\"token punctuation\">.</span>Dno <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span>\n<span class=\"token keyword\">WHERE</span> E<span class=\"token punctuation\">.</span>Lname <span class=\"token operator\">=</span> <span class=\"token string\">'Tatis'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<div class=\"table-of-contents\">\n<ul>\n<li>\n<p><a href=\"#-%EA%B8%B0%EB%B3%B8-%EA%B2%80%EC%83%89-query\">🔍 기본 검색 Query</a></p>\n<ul>\n<li><a href=\"#select-%EB%AC%B8\">SELECT 문</a></li>\n<li><a href=\"#aliasing--renaming\">Aliasing / Renaming</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#-sql-%EC%A7%91%ED%95%A9-%EC%97%B0%EC%82%B0%EC%9E%90\">📦 SQL 집합 연산자</a></p>\n<ul>\n<li><a href=\"#set-%EC%97%B0%EC%82%B0%EC%9E%90\">Set 연산자</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#-sql-%EC%B6%94%EA%B0%80-%EA%B8%B0%EB%8A%A5\">⚙ SQL 추가 기능</a></p>\n<ul>\n<li><a href=\"#substring-pattern-matching\">Substring Pattern Matching</a></li>\n<li><a href=\"#%EC%82%B0%EC%88%A0-%EC%97%B0%EC%82%B0%EC%9E%90\">산술 연산자</a></li>\n<li><a href=\"#%EC%A7%88%EC%9D%98-%EA%B2%B0%EA%B3%BC-%EC%A0%95%EB%A0%AC\">질의 결과 정렬</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#-insert-%EB%AC%B8\">✔ INSERT 문</a></p>\n</li>\n<li>\n<p><a href=\"#-delete-%EB%AC%B8\">❌ DELETE 문</a></p>\n</li>\n<li>\n<p><a href=\"#-update-%EB%AC%B8\">✂ UPDATE 문</a></p>\n</li>\n</ul>\n</div>","frontmatter":{"date":"March 16, 2022","title":"[Database] Basic SQL Queries","categories":"Database","author":"JFe","emoji":"🙋‍♀️"},"fields":{"slug":"/db-basic-sql-queries/"}},"site":{"siteMetadata":{"siteUrl":"https://jfelog.netlify.app","comments":{"utterances":{"repo":"Go-Jaecheol/Jfe_Blog"}}}}},"pageContext":{"slug":"/boj-17136/","nextSlug":"/boj-16637/","prevSlug":"/db-basic-sql-queries/"}},
    "staticQueryHashes": ["1073350324","1956554647","2938748437"]}