{
    "componentChunkName": "component---src-templates-blog-template-js",
    "path": "/pg-67258/",
    "result": {"data":{"cur":{"id":"ac590477-c190-5bff-a8e1-2a4726375ba3","html":"<h2 id=\"2020-카카오-인턴십\" style=\"position:relative;\"><a href=\"#2020-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%9D%B8%ED%84%B4%EC%8B%AD\" aria-label=\"2020 카카오 인턴십 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>[2020 카카오 인턴십]</h2>\n<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://programmers.co.kr/learn/courses/30/lessons/67258\">https://programmers.co.kr/learn/courses/30/lessons/67258</a></p>\n<p>[본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.]</p>\n<p>개발자 출신으로 세계 최고의 갑부가 된 어피치는 스트레스를 받을 때면 이를 풀기 위해 오프라인 매장에 쇼핑을 하러 가곤 합니다.<br>\n어피치는 쇼핑을 할 때면 매장 진열대의 특정 범위의 물건들을 모두 싹쓸이 구매하는 습관이 있습니다.<br>\n어느 날 스트레스를 풀기 위해 보석 매장에 쇼핑을 하러 간 어피치는 이전처럼 진열대의 특정 범위의 보석을 모두 구매하되 특별히 아래 목적을 달성하고 싶었습니다.<br>\n<code class=\"language-text\">진열된 모든 종류의 보석을 적어도 1개 이상 포함하는 가장 짧은 구간을 찾아서 구매</code></p>\n<p>예를 들어 아래 진열대는 4종류의 보석(RUBY, DIA, EMERALD, SAPPHIRE) 8개가 진열된 예시입니다.</p>\n<table>\n<thead>\n<tr>\n<th>진열대 번호</th>\n<th>1</th>\n<th>2</th>\n<th>3</th>\n<th>4</th>\n<th>5</th>\n<th>6</th>\n<th>7</th>\n<th>8</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>보석 이름</td>\n<td>DIA</td>\n<td>RUBY</td>\n<td>RUBY</td>\n<td>DIA</td>\n<td>DIA</td>\n<td>EMERALD</td>\n<td>SAPPHIRE</td>\n<td>DIA</td>\n</tr>\n</tbody>\n</table>\n<p>진열대의 3번부터 7번까지 5개의 보석을 구매하면 모든 종류의 보석을 적어도 하나 이상씩 포함하게 됩니다.</p>\n<p>진열대의 3, 4, 6, 7번의 보석만 구매하는 것은 중간에 특정 구간(5번)이 빠지게 되므로 어피치의 쇼핑 습관에 맞지 않습니다.</p>\n<p>진열대 번호 순서대로 보석들의 이름이 저장된 배열 gems가 매개변수로 주어집니다. 이때 모든 보석을 하나 이상 포함하는 가장 짧은 구간을 찾아서 return 하도록 solution 함수를 완성해주세요.<br>\n가장 짧은 구간의 <code class=\"language-text\">시작 진열대 번호</code>와 <code class=\"language-text\">끝 진열대 번호</code>를 차례대로 배열에 담아서 return 하도록 하며, 만약 가장 짧은 구간이 여러 개라면 <code class=\"language-text\">시작 진열대 번호</code>가 가장 작은 구간을 return 합니다.</p>\n<hr>\n<h2 id=\"제한사항\" style=\"position:relative;\"><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\" 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<ul>\n<li>gems 배열의 크기는 1 이상 100,000 이하입니다.\n<ul>\n<li>gems 배열의 각 원소는 진열대에 나열된 보석을 나타냅니다.</li>\n<li>gems 배열에는 1번 진열대부터 진열대 번호 순서대로 보석이름이 차례대로 저장되어 있습니다.</li>\n<li>gems 배열의 각 원소는 길이가 1 이상 10 이하인 알파벳 대문자로만 구성된 문자열입니다.</li>\n</ul>\n</li>\n</ul>\n<hr>\n<h2 id=\"입출력-예\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\" 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<table>\n<thead>\n<tr>\n<th>gems</th>\n<th>result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>[“DIA”, “RUBY”, “RUBY”, “DIA”, “DIA”, “EMERALD”, “SAPPHIRE”, “DIA”]</td>\n<td>[3, 7]</td>\n</tr>\n<tr>\n<td>[“AA”, “AB”, “AC”, “AA”, “AC”]</td>\n<td>[1, 3]</td>\n</tr>\n<tr>\n<td>[“XYZ”, “XYZ”, “XYZ”]</td>\n<td>[1, 1]</td>\n</tr>\n<tr>\n<td>[“ZZZ”, “YYY”, “NNNN”, “YYY”, “BBB”]</td>\n<td>[1, 5]</td>\n</tr>\n</tbody>\n</table>\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>Two Pointers</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\">start <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\ncurrent <span class=\"token operator\">=</span> defaultdict<span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\"># 기본값 0인 dictionary 생성</span>\ncount <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">set</span><span class=\"token punctuation\">(</span>gems<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\"># set을 이용해서 중복 제거하고 전체 보석 수 저장</span>\nanswer <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>gems<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span></code></pre></div>\n<ul>\n<li><code class=\"language-text\">defaultdict</code>에 <strong>int</strong>를 인자로 주고 생성하여 기본값이 <strong>0</strong>인 <strong>dictionary</strong>를 생성</li>\n<li><code class=\"language-text\">set</code>을 이용해서 중복 제거하고 전체 보석 수 저장</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># start, end 투 포인터를 이용해서 가장 짧은 구간 찾기</span>\n    <span class=\"token keyword\">for</span> end <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>gems<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        current<span class=\"token punctuation\">[</span>gems<span class=\"token punctuation\">[</span>end<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n        <span class=\"token comment\"># 모든 보석을 하나 이상 포함하는 경우</span>\n        <span class=\"token keyword\">while</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>current<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> count<span class=\"token punctuation\">:</span>\n            <span class=\"token comment\"># 해당 구간의 길이가 answer 구간 길이보다 작으면 업데이트</span>\n            <span class=\"token keyword\">if</span> end <span class=\"token operator\">-</span> start <span class=\"token operator\">&lt;</span> answer<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> answer<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                answer<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> answer<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> start<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> end<span class=\"token operator\">+</span><span class=\"token number\">1</span>\n            current<span class=\"token punctuation\">[</span>gems<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-=</span> <span class=\"token number\">1</span>\n            <span class=\"token comment\"># 해당 키 값이 0이 되면 dictionary에서 삭제</span>\n            <span class=\"token keyword\">if</span> current<span class=\"token punctuation\">[</span>gems<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span><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\">del</span> current<span class=\"token punctuation\">[</span>gems<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span>\n            start <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n    <span class=\"token keyword\">return</span> answer</code></pre></div>\n<ul>\n<li><strong>start, end 투 포인터를 이용해서 가장 짧은 구간 찾기</strong><br>\n<code class=\"language-text\">end</code>가 전체 보석 리스트의 처음부터 끝까지 이동하면서 해당 보석의 <strong>dictionary</strong> 키 값을 <strong>+1</strong><br>\n모든 보석을 하나 이상 포함하는 경우에는,<br>\n해당 구간의 길이가 <code class=\"language-text\">answer</code> 구간 길이보다 작은지 확인하고 작으면 <code class=\"language-text\">answer</code> 값 업데이트하고<br>\n해당 키 값을 <strong>-1</strong> 하고(이 때, 해당 키 값이 <strong>0</strong>이 되면 <strong>dictionary</strong>에서 삭제), <code class=\"language-text\">start</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\">from</span> collections <span class=\"token keyword\">import</span> defaultdict\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">solution</span><span class=\"token punctuation\">(</span>gems<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    start <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n    current <span class=\"token operator\">=</span> defaultdict<span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\"># 기본값 0인 dictionary 생성</span>\n    count <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">set</span><span class=\"token punctuation\">(</span>gems<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\"># set을 이용해서 중복 제거하고 전체 보석 수 저장</span>\n    answer <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>gems<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    <span class=\"token comment\"># start, end 투 포인터를 이용해서 가장 짧은 구간 찾기</span>\n    <span class=\"token keyword\">for</span> end <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>gems<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        current<span class=\"token punctuation\">[</span>gems<span class=\"token punctuation\">[</span>end<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n        <span class=\"token comment\"># 모든 보석을 하나 이상 포함하는 경우</span>\n        <span class=\"token keyword\">while</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>current<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> count<span class=\"token punctuation\">:</span>\n            <span class=\"token comment\"># 해당 구간의 길이가 answer 구간 길이보다 작으면 업데이트</span>\n            <span class=\"token keyword\">if</span> end <span class=\"token operator\">-</span> start <span class=\"token operator\">&lt;</span> answer<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> answer<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                answer<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> answer<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> start<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> end<span class=\"token operator\">+</span><span class=\"token number\">1</span>\n            current<span class=\"token punctuation\">[</span>gems<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-=</span> <span class=\"token number\">1</span>\n            <span class=\"token comment\"># 해당 키 값이 0이 되면 dictionary에서 삭제</span>\n            <span class=\"token keyword\">if</span> current<span class=\"token punctuation\">[</span>gems<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span><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\">del</span> current<span class=\"token punctuation\">[</span>gems<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span>\n            start <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n    <span class=\"token keyword\">return</span> answer</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그러다가 예전에 배웠었던 <code class=\"language-text\">슬라이딩 윈도우</code>를 생각해냈는데 <code class=\"language-text\">슬라이딩 윈도우</code>는 고정 길이고, 여기서는 길이가 변해야 하기 때문에 <code class=\"language-text\">투 포인터</code> 알고리즘이라고 얘기하는게 맞는 것 같다.<br>\n<strong>dictionary</strong>와 <strong>투 포인터</strong>를 이용해서 구현했는데 모든 보석을 하나 이상 포함하고 있는지 처리하는 과정이 효율적이지 않아서 이 부분은 검색을 통해 <code class=\"language-text\">defaultdict</code> 라는 것이 있다는 것을 알게 되었고, <code class=\"language-text\">defaultdict</code>를 이용해서 간단하게 구현할 수 있었다.</p>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#2020-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%9D%B8%ED%84%B4%EC%8B%AD\">[2020 카카오 인턴십]</a></li>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\">제한사항</a></li>\n<li><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\">입출력 예</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":"[2020 카카오 인턴십] 문제 https://programmers.co.kr/learn/courses/30/lessons/67258 [본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.] 개발자 출신으로 세계 최고의 갑부가 된 어피치는 스트레스를 받을 때면 이를 풀기 위해 오프라인 매장에 쇼핑을 하러 가곤 합니다. 어피치는 쇼핑을 할 때면 매장 진열대의 특정 범위의 물건들을 모두 싹쓸이 구매하는 습관이 있습니다. 어느 날 스트레스를 풀기 위해 보석 매장에 쇼핑을 하러 간 어피치는 이전처럼 진열대의 특정 범위의 보석을 모두 구매하되 특별히 아래 목적을 달성하고 싶었습니다.  예를 들어 아래 진열대는 4종류의 보석(RUBY, DIA, EMERALD, SAPPHIRE) 8개가 진열된 예시입니다. 진열대 번호 1 2 3 4 5 6 7 8 보석 이름 DIA RUBY RUBY DIA DIA EMERALD SAPPHIRE DIA 진열대의 3번부터 7번까지 5개의 보석을 구매하면 …","frontmatter":{"date":"May 01, 2022","title":"[Programmers] 67258번: 보석 쇼핑 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/pg-67258/"}},"next":{"id":"83e96ae5-b1e9-5e50-a2dd-cbe0ae841b99","html":"<h2 id=\"2020-카카오-인턴십\" style=\"position:relative;\"><a href=\"#2020-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%9D%B8%ED%84%B4%EC%8B%AD\" aria-label=\"2020 카카오 인턴십 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>[2020 카카오 인턴십]</h2>\n<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://programmers.co.kr/learn/courses/30/lessons/67257\">https://programmers.co.kr/learn/courses/30/lessons/67257</a></p>\n<p>IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다.<br>\n이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 같은 방식으로 결정하려고 합니다.<br>\n해커톤 대회에 참가하는 모든 참가자들에게는 숫자들과 3가지의 연산문자(<code class=\"language-text\">+, -, *</code>) 만으로 이루어진 연산 수식이 전달되며, 참가자의 미션은 전달받은 수식에 포함된 연산자의 우선순위를 자유롭게 재정의하여 만들 수 있는 가장 큰 숫자를 제출하는 것입니다.<br>\n단, 연산자의 우선순위를 새로 정의할 때, 같은 순위의 연산자는 없어야 합니다. 즉, <code class=\"language-text\">+</code> > <code class=\"language-text\">-</code> > <code class=\"language-text\">*</code> 또는 <code class=\"language-text\">-</code> > <code class=\"language-text\">*</code> > <code class=\"language-text\">+</code> 등과 같이 연산자 우선순위를 정의할 수 있으나 <code class=\"language-text\">+,*</code> > <code class=\"language-text\">-</code> 또는 <code class=\"language-text\">*</code> > <code class=\"language-text\">+,-</code> 처럼 2개 이상의 연산자가 동일한 순위를 가지도록 연산자 우선순위를 정의할 수는 없습니다. 수식에 포함된 연산자가 2개라면 정의할 수 있는 연산자 우선순위 조합은 2! = 2가지이며, 연산자가 3개라면 3! = 6가지 조합이 가능합니다.<br>\n만약 계산된 결과가 음수라면 해당 숫자의 절댓값으로 변환하여 제출하며 제출한 숫자가 가장 큰 참가자를 우승자로 선정하며, 우승자가 제출한 숫자를 우승상금으로 지급하게 됩니다.</p>\n<p>예를 들어, 참가자 중 네오가 아래와 같은 수식을 전달받았다고 가정합니다.</p>\n<p><code class=\"language-text\">\"100-200*300-500+20\"</code></p>\n<p>일반적으로 수학 및 전산학에서 약속된 연산자 우선순위에 따르면 더하기와 빼기는 서로 동등하며 곱하기는 더하기, 빼기에 비해 우선순위가 높아 <code class=\"language-text\">*</code> > <code class=\"language-text\">+,-</code> 로 우선순위가 정의되어 있습니다.<br>\n대회 규칙에 따라 <code class=\"language-text\">+</code> > <code class=\"language-text\">-</code> > <code class=\"language-text\">*</code> 또는 <code class=\"language-text\">-</code> > <code class=\"language-text\">*</code> > <code class=\"language-text\">+</code> 등과 같이 연산자 우선순위를 정의할 수 있으나 <code class=\"language-text\">+,*</code> > <code class=\"language-text\">-</code> 또는 <code class=\"language-text\">*</code> > <code class=\"language-text\">+,-</code> 처럼 2개 이상의 연산자가 동일한 순위를 가지도록 연산자 우선순위를 정의할 수는 없습니다.<br>\n수식에 연산자가 3개 주어졌으므로 가능한 연산자 우선순위 조합은 3! = 6가지이며, 그 중 <code class=\"language-text\">+</code> > <code class=\"language-text\">-</code> > <code class=\"language-text\">*</code> 로 연산자 우선순위를 정한다면 결괏값은 22,000원이 됩니다.<br>\n반면에 <code class=\"language-text\">*</code> > <code class=\"language-text\">+</code> > <code class=\"language-text\">-</code> 로 연산자 우선순위를 정한다면 수식의 결괏값은 -60,420 이지만, 규칙에 따라 우승 시 상금은 절댓값인 60,420원이 됩니다.</p>\n<p>참가자에게 주어진 연산 수식이 담긴 문자열 expression이 매개변수로 주어질 때, 우승 시 받을 수 있는 가장 큰 상금 금액을 return 하도록 solution 함수를 완성해주세요.</p>\n<hr>\n<h2 id=\"제한사항\" style=\"position:relative;\"><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\" 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<ul>\n<li>expression은 길이가 3 이상 100 이하인 문자열입니다.</li>\n<li>expression은 공백문자, 괄호문자 없이 오로지 숫자와 3가지의 연산자(<code class=\"language-text\">+, -, *</code>) 만으로 이루어진 올바른 중위표기법(연산의 두 대상 사이에 연산기호를 사용하는 방식)으로 표현된 연산식입니다. 잘못된 연산식은 입력으로 주어지지 않습니다.\n<ul>\n<li>즉, <code class=\"language-text\">\"402+-561*\"</code>처럼 잘못된 수식은 올바른 중위표기법이 아니므로 주어지지 않습니다.</li>\n</ul>\n</li>\n<li>expression의 피연산자(operand)는 0 이상 999 이하의 숫자입니다.\n<ul>\n<li>즉, <code class=\"language-text\">\"100-2145*458+12\"</code>처럼 999를 초과하는 피연산자가 포함된 수식은 입력으로 주어지지 않습니다.</li>\n<li><code class=\"language-text\">\"-56+100\"</code>처럼 피연산자가 음수인 수식도 입력으로 주어지지 않습니다.</li>\n</ul>\n</li>\n<li>expression은 적어도 1개 이상의 연산자를 포함하고 있습니다.</li>\n<li>연산자 우선순위를 어떻게 적용하더라도, expression의 중간 계산값과 최종 결괏값은 절댓값이 263 - 1 이하가 되도록 입력이 주어집니다.</li>\n<li>같은 연산자끼리는 앞에 있는 것의 우선순위가 더 높습니다.</li>\n</ul>\n<hr>\n<h2 id=\"입출력-예\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\" 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<table>\n<thead>\n<tr>\n<th>expression</th>\n<th>result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>“100-200*300-500+20”</td>\n<td>60420</td>\n</tr>\n<tr>\n<td>“50<em>6-3</em>2”</td>\n<td>300</td>\n</tr>\n</tbody>\n</table>\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>Permutation, Stack</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 comment\"># 숫자, 연산자 분리</span>\n<span class=\"token keyword\">for</span> e <span class=\"token keyword\">in</span> expression<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> e <span class=\"token operator\">==</span> <span class=\"token string\">'*'</span> <span class=\"token keyword\">or</span> e <span class=\"token operator\">==</span> <span class=\"token string\">'+'</span> <span class=\"token keyword\">or</span> e <span class=\"token operator\">==</span> <span class=\"token string\">'-'</span><span class=\"token punctuation\">:</span>\n        op<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span>\n        num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp<span class=\"token punctuation\">)</span>\n        temp <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n        temp <span class=\"token operator\">=</span> <span class=\"token number\">10</span> <span class=\"token operator\">*</span> temp\n        temp <span class=\"token operator\">+=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span>\nnum<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp<span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li><strong>숫자, 연산자 분리</strong><br>\n연산자를 만나기 전까지의 값들은 숫자 형태로 <code class=\"language-text\">temp</code>에 계산해서 저장해두고<br>\n연산자를 만나면 연산자를 <code class=\"language-text\">op</code>에 저장된 숫자 <code class=\"language-text\">temp</code>를 <code class=\"language-text\">num</code>에 <strong>append</strong></li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># 순열 생성</span>\norder_list <span class=\"token operator\">=</span> permutations<span class=\"token punctuation\">(</span><span class=\"token builtin\">set</span><span class=\"token punctuation\">(</span>op<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\"># op 중복 제거하고 순열 생성</span>\n<span class=\"token keyword\">for</span> order <span class=\"token keyword\">in</span> order_list<span class=\"token punctuation\">:</span>\n    result <span class=\"token operator\">=</span> <span class=\"token builtin\">abs</span><span class=\"token punctuation\">(</span>calculate<span class=\"token punctuation\">(</span>op<span class=\"token punctuation\">,</span> num<span class=\"token punctuation\">,</span> order<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token comment\"># 계산 결과 절댓값으로 저장</span>\n    answer <span class=\"token operator\">=</span> <span class=\"token builtin\">max</span><span class=\"token punctuation\">(</span>answer<span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">)</span>    <span class=\"token comment\"># 순열 반복하면서 최댓값 저장</span></code></pre></div>\n<ul>\n<li><strong>순열 생성</strong><br>\n연산자 우선순위를 정하기 위해 <strong>permutations</strong>를 이용해서 순열 생성<br>\n이 때, <code class=\"language-text\">op</code>에 중복을 제거하기 위해 <strong>set</strong> 사용<br>\n순열을 반복문 돌면서 우선순위에 맞게 <code class=\"language-text\">calculate</code> 함수 호출해서 계산하고 결과값을 절댓값으로 <code class=\"language-text\">result</code>에 저장<br>\n각 우선순위마다 나오는 결과값들 중 최댓값을 <code class=\"language-text\">answer</code>에 저장</li>\n</ul>\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\">calculate</span><span class=\"token punctuation\">(</span>op<span class=\"token punctuation\">,</span> num<span class=\"token punctuation\">,</span> order<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> o <span class=\"token keyword\">in</span> order<span class=\"token punctuation\">:</span>\n        temp_num <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span>\n        temp_op <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">for</span> i<span class=\"token punctuation\">,</span> v <span class=\"token keyword\">in</span> <span class=\"token builtin\">enumerate</span><span class=\"token punctuation\">(</span>op<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token comment\"># 연산자가 우선순위 아닌 경우</span>\n            <span class=\"token keyword\">if</span> v <span class=\"token operator\">!=</span> o<span class=\"token punctuation\">:</span> \n                temp_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>num<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n                temp_op<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>v<span class=\"token punctuation\">)</span>\n                <span class=\"token keyword\">continue</span>\n            <span class=\"token comment\"># 연산자가 우선순위인 경우, 연산자에 따라 계산</span>\n            <span class=\"token keyword\">if</span> v <span class=\"token operator\">==</span> <span class=\"token string\">'+'</span><span class=\"token punctuation\">:</span> temp_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp_num<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> num<span class=\"token punctuation\">[</span>i<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\">elif</span> v <span class=\"token operator\">==</span> <span class=\"token string\">'-'</span><span class=\"token punctuation\">:</span> temp_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp_num<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> num<span class=\"token punctuation\">[</span>i<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\">else</span><span class=\"token punctuation\">:</span> temp_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp_num<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> num<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        num <span class=\"token operator\">=</span> temp_num\n        op <span class=\"token operator\">=</span> temp_op\n    <span class=\"token keyword\">return</span> num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span></code></pre></div>\n<ul>\n<li><strong>정해진 우선순위 <code class=\"language-text\">order</code>에 맞게 계산하는 함수</strong><br>\n정해진 우선순위를 반복문 돌면서 <code class=\"language-text\">op</code> 리스트에서 해당 연산자가 우선순위인지 아닌지에 나눠서 처리<br>\n<strong>해당 연산자가 우선순위가 아닌 경우</strong> -> 그 연산자 뒤에 오는 숫자를 <code class=\"language-text\">temp_num</code>에, 해당 연산자를 <code class=\"language-text\">temp_op</code>에 <strong>append</strong><br>\n<strong>해당 연산자가 우선순위인 경우</strong> -> <code class=\"language-text\">temp_num</code> 스택에서 <strong>pop</strong>한 값과 연산자 뒤에 오는 숫자를 연산자에 맞게 계산하고 <code class=\"language-text\">temp_num</code>에 다시 <strong>append</strong></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> copy\n<span class=\"token keyword\">from</span> itertools <span class=\"token keyword\">import</span> permutations\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">calculate</span><span class=\"token punctuation\">(</span>op<span class=\"token punctuation\">,</span> num<span class=\"token punctuation\">,</span> order<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> o <span class=\"token keyword\">in</span> order<span class=\"token punctuation\">:</span>\n        temp_num <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span>\n        temp_op <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">for</span> i<span class=\"token punctuation\">,</span> v <span class=\"token keyword\">in</span> <span class=\"token builtin\">enumerate</span><span class=\"token punctuation\">(</span>op<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token comment\"># 연산자가 우선순위 아닌 경우</span>\n            <span class=\"token keyword\">if</span> v <span class=\"token operator\">!=</span> o<span class=\"token punctuation\">:</span> \n                temp_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>num<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n                temp_op<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>v<span class=\"token punctuation\">)</span>\n                <span class=\"token keyword\">continue</span>\n            <span class=\"token comment\"># 연산자가 우선순위인 경우, 연산자에 따라 계산</span>\n            <span class=\"token keyword\">if</span> v <span class=\"token operator\">==</span> <span class=\"token string\">'+'</span><span class=\"token punctuation\">:</span> temp_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp_num<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> num<span class=\"token punctuation\">[</span>i<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\">elif</span> v <span class=\"token operator\">==</span> <span class=\"token string\">'-'</span><span class=\"token punctuation\">:</span> temp_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp_num<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> num<span class=\"token punctuation\">[</span>i<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\">else</span><span class=\"token punctuation\">:</span> temp_num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp_num<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> num<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        num <span class=\"token operator\">=</span> temp_num\n        op <span class=\"token operator\">=</span> temp_op\n    <span class=\"token keyword\">return</span> num<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">solution</span><span class=\"token punctuation\">(</span>expression<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    answer<span class=\"token punctuation\">,</span> temp<span class=\"token punctuation\">,</span> last <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span>\n    op<span class=\"token punctuation\">,</span> num <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>\n    <span class=\"token comment\"># 숫자, 연산자 분리</span>\n    <span class=\"token keyword\">for</span> e <span class=\"token keyword\">in</span> expression<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> e <span class=\"token operator\">==</span> <span class=\"token string\">'*'</span> <span class=\"token keyword\">or</span> e <span class=\"token operator\">==</span> <span class=\"token string\">'+'</span> <span class=\"token keyword\">or</span> e <span class=\"token operator\">==</span> <span class=\"token string\">'-'</span><span class=\"token punctuation\">:</span>\n            op<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span>\n            num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp<span class=\"token punctuation\">)</span>\n            temp <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            temp <span class=\"token operator\">=</span> <span class=\"token number\">10</span> <span class=\"token operator\">*</span> temp\n            temp <span class=\"token operator\">+=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span>\n    num<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>temp<span class=\"token punctuation\">)</span>\n    <span class=\"token comment\"># 순열 생성</span>\n    order_list <span class=\"token operator\">=</span> permutations<span class=\"token punctuation\">(</span><span class=\"token builtin\">set</span><span class=\"token punctuation\">(</span>op<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\"># op 중복 제거하고 순열 생성</span>\n    <span class=\"token keyword\">for</span> order <span class=\"token keyword\">in</span> order_list<span class=\"token punctuation\">:</span>\n        result <span class=\"token operator\">=</span> <span class=\"token builtin\">abs</span><span class=\"token punctuation\">(</span>calculate<span class=\"token punctuation\">(</span>op<span class=\"token punctuation\">,</span> num<span class=\"token punctuation\">,</span> order<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token comment\"># 계산 결과 절댓값으로 저장</span>\n        answer <span class=\"token operator\">=</span> <span class=\"token builtin\">max</span><span class=\"token punctuation\">(</span>answer<span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">)</span>    <span class=\"token comment\"># 순열 반복하면서 최댓값 저장</span>\n    <span class=\"token keyword\">return</span> answer</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>연산자 우선순위를 정해야 한다고 해서 <code class=\"language-text\">permutations</code>를 이용해서 순열로 만들어야겠다고 생각하고 구현했다.<br>\n처음에는 반복문을 돌면서 인덱스를 이용해 리스트에서 값을 삭제하고 계산한 값을 넣는 방식으로 계산하는 부분을 구현하려고 했는데,<br>\n인덱스 에러가 나서 스택을 이용해 계산하는 방식으로 바꿨다.</p>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#2020-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%9D%B8%ED%84%B4%EC%8B%AD\">[2020 카카오 인턴십]</a></li>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\">제한사항</a></li>\n<li><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\">입출력 예</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":"April 28, 2022","title":"[Programmers] 67257번: 수식 최대화 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/pg-67257/"}},"prev":{"id":"7f155776-9804-542d-8706-559233061c13","html":"<h2 id=\"2020-카카오-인턴십\" style=\"position:relative;\"><a href=\"#2020-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%9D%B8%ED%84%B4%EC%8B%AD\" aria-label=\"2020 카카오 인턴십 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>[2020 카카오 인턴십]</h2>\n<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://programmers.co.kr/learn/courses/30/lessons/67259\">https://programmers.co.kr/learn/courses/30/lessons/67259</a></p>\n<p>건설회사의 설계사인 죠르디는 고객사로부터 자동차 경주로 건설에 필요한 견적을 의뢰받았습니다.<br>\n제공된 경주로 설계 도면에 따르면 경주로 부지는 <code class=\"language-text\">N x N</code> 크기의 정사각형 격자 형태이며 각 격자는 <code class=\"language-text\">1 x 1</code> 크기입니다.<br>\n설계 도면에는 각 격자의 칸은 <code class=\"language-text\">0</code> 또는 <code class=\"language-text\">1</code> 로 채워져 있으며, <code class=\"language-text\">0</code>은 칸이 비어 있음을 <code class=\"language-text\">1</code>은 해당 칸이 벽으로 채워져 있음을 나타냅니다.<br>\n경주로의 출발점은 (0, 0) 칸(좌측 상단)이며, 도착점은 (N-1, N-1) 칸(우측 하단)입니다. 죠르디는 출발점인 (0, 0) 칸에서 출발한 자동차가 도착점인 (N-1, N-1) 칸까지 무사히 도달할 수 있게 중간에 끊기지 않도록 경주로를 건설해야 합니다.<br>\n경주로는 상, 하, 좌, 우로 인접한 두 빈 칸을 연결하여 건설할 수 있으며, 벽이 있는 칸에는 경주로를 건설할 수 없습니다.<br>\n이때, 인접한 두 빈 칸을 상하 또는 좌우로 연결한 경주로를 <code class=\"language-text\">직선 도로</code> 라고 합니다.<br>\n또한 두 <code class=\"language-text\">직선 도로</code>가 서로 직각으로 만나는 지점을 <code class=\"language-text\">코너</code> 라고 부릅니다.<br>\n건설 비용을 계산해 보니 <code class=\"language-text\">직선 도로</code> 하나를 만들 때는 100원이 소요되며, <code class=\"language-text\">코너</code>를 하나 만들 때는 500원이 추가로 듭니다.<br>\n죠르디는 견적서 작성을 위해 경주로를 건설하는 데 필요한 최소 비용을 계산해야 합니다.</p>\n<p>예를 들어, 아래 그림은 <code class=\"language-text\">직선 도로</code> 6개와 <code class=\"language-text\">코너</code> 4개로 구성된 임의의 경주로 예시이며, 건설 비용은 6 x 100 + 4 x 500 = 2600원 입니다.</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: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAADwUlEQVQ4y42Uy28bVRTG88fAghVbWLDh72CNRKkQAVEQTR/Qxil9JpSKIiF2sCBUsGCBWgRSq5TUTWzPy5732I7tOGM7noztJmmc+aFzW5uk3bA4mjvfnPnu+b5z7p2pbXbH9XZvLE+JaiseV5vx9P0Z1jn2PsGO4hOOmXq7R22zy8bWNq3uDoZXQ3citRas2Ulwog2cqKHWkzzd9rG86jRPOIRrprbZzTa2tjO94mXFSpCt/nU3W/37Xqa51SxfNDKt4mVa+VkULTfLl8zMsIOsaDkKK5h2ZjhB1oj7mXAJodqlZNp4zR4/n3uX5QsnieKUtZJJUN8kbGwRNWPscIM1vUy11SHYaD/H6hRNh0acqCpnGnEfveKTL+hE8YB7V0/w5+Is1e4Io+JRFylb20he2Ghj2IGSLvImmMiX9ZTQdEIer2sEgzFebhZ/fpZweIhuOVNvxCepSjaf/DzBtCPYVLJuOjjpPun8WXYWzuOPxpT0ipIlEiXPq7UoWa7aQPBnWBOt7B0nlJ2kwtWwQffry3RvXeNxdZMHK49Usl72MCyH9ZLJg4d5zIqHZlQwbZ81rczjkqVsmBLKi27aOIMDhrk5hvOn8Z8cohk21WZMECdEe+D0n7AetajtQTA6JIwTfKnwqGSpruLXKEhHdzO2Pv+Q9mcfEO6BYVQUWf6H70lPnSDNzdH95iqjhTP0T71P/qcfcTd76GX3P0Lxwxdv9DLBHiRnPiY5PUu0D4ZmqWf66UnGb79O/9tFZUl6e4nxW6+RLJzFG46VumMeimQhtHpD0stfkF67iN3fpbCu4SS77OTm6N9eQjuEvB3iAP0rX5IsXsLsDtS/LzSl/7wpTbpLX6lYC5us3H/IujRKsJtXeOTVWLm/Qils0Fu8RPzdTVb9OmsF/YWmdHcwyy7BLjxZOMPgeo4A0PwaITBYusTo2kX80SGmyNuHQW6Owa3rBMMDNQHHBttwQrWLNzqkM/cRB2++SnIjR+9Gjp2rFzh44xU650+pOdVLJrWnMHzvHQbnPsERD43K8S5bbkRBmhL3WV9eJpk/Tbq4QOf2EoMbC/Tm5yjcuYPf7ikljXSfzq+/0Ln7B0E3VXP60kkpWg62X8Nvb+MOD7CTXf7x6zg7e7iDpwqX7zLIUWMLr5MqsopXpSA2HPVQqpRDL7eGXAgyBjLUYoOsVZQ9iparToVuB2iCWS6lsoflRWwcnUNZSMkvhnTuZTyh1Usx3UhdZcu//U6+ZB7v8oT0f0Wro/LlovCqTcp+FbfamN7a/wKz7X/3z7rskQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"kakao_road2.png\"\n        title=\"kakao_road2.png\"\n        src=\"/static/0ebad25632256e9025318a4b68fd4c38/37523/kakao_road2.png\"\n        srcset=\"/static/0ebad25632256e9025318a4b68fd4c38/e9ff0/kakao_road2.png 180w,\n/static/0ebad25632256e9025318a4b68fd4c38/f21e7/kakao_road2.png 360w,\n/static/0ebad25632256e9025318a4b68fd4c38/37523/kakao_road2.png 720w,\n/static/0ebad25632256e9025318a4b68fd4c38/00d43/kakao_road2.png 1000w\"\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>또 다른 예로, 아래 그림은 직선 도로 4개와 코너 1개로 구성된 경주로이며, 건설 비용은 4 x 100 + 1 x 500 = 900원 입니다.</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: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAADUUlEQVQ4y6VUXW/cRBTNz+FH8D/gGR6qRLRR02ybhnwVVW1aISHxCv+gT0gICcELKYXQ7Ic9ttee9cfGH2tnvfZmPZs03WXlg+6kNgkpvPAwmpkznnPvPed6lvwkWwQn+YLmahzHo//cV9hVvOJYCk5y+EmGcDhGkguoXRuK0UOcC4kNRhPwfgjej+SasDgrwCwHhn0s14QRB3Et+UlWhsNxyUy7bLNu2dGtUmHdkmlmedRU5Ky+G4QTphm8VFSjVA1etnVeatwto/S0JC4ilFFUy4M7LODnF3DEAvxsgcMgRe98AftNCecCMCYXEnNngH2+gJcJWK6Pts4RpROZ5VI0HEOzfRz8/CN++GoTv3+7jfTrLYjNNWQbtzHduYfpzjrOdtdRbK0h37iNs70GxN59pAe/wE0nYN0eovT0kjAc5jC9CD99/x2+Wf0ILz7/GM7jzyAe3kV2fwVi6y6mNLbXUGyuIltfhniyjcWHH0Ds76I3/RNMt/4mrEpmvA8ejmAPxrCLuSzxKM7l7L4FvBlgiTmaYQoXwGS3gWJ/F1Yxg6qZ1wnJpdcdDS3Whc5daAaHwrp4+epQfkwZENbqaPj14DcoYYr8zidIHz3A4XGCZpvJDqgJacNMB06QSJBGf5DKFjqOR3VLOEEMVbPgvwVEYwVifwdczME066qGY5iOj7ZmoR8N5UUaRKSaTk1G37lBAqZzBDNg2liGeLZ3U0MZ2Y9lM1NWdFA1KrPcmoxwLzqBZvQQzolwBeL5I9k+N0yhkonQ8kJ5yQ1PYPsxWsyUMrhhAi8awnIDtBQdznSO4t4tTJ7uQM/Ppd7/MOUUrzs6mqwLzXKlnhTg4LApdaTSKVsK8PLVH1CSHPnqp0i/2PgXU7ICGvekbnRA0ahUnXt1uYSTJLppI1oAZ41lTJ/twX1Tyg6oM6QFkTXVriyreize73ICVbfgXwDi4R0UXz4GF7PrGlIGRq+PlmbKy+EVU7QbpgwlNsgFIqePuB/Ci0dSoht/SkfnsLxAXro0ZSCzpt6rTDHdQGKUvR2lkky2nMxwcv1PochESu8cmUDlHikGVPOdKaaDjtGTGBlE54QRGWl9rQ9pQQBFuZxPayOu7t+PTWqy6oGtjfg/o+L4C5zHjdCQnI8jAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"kakao_road3.png\"\n        title=\"kakao_road3.png\"\n        src=\"/static/1660f205f0e3e9311894309ae0105dda/37523/kakao_road3.png\"\n        srcset=\"/static/1660f205f0e3e9311894309ae0105dda/e9ff0/kakao_road3.png 180w,\n/static/1660f205f0e3e9311894309ae0105dda/f21e7/kakao_road3.png 360w,\n/static/1660f205f0e3e9311894309ae0105dda/37523/kakao_road3.png 720w,\n/static/1660f205f0e3e9311894309ae0105dda/00d43/kakao_road3.png 1000w\"\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>도면의 상태(0은 비어 있음, 1은 벽)을 나타내는 2차원 배열 board가 매개변수로 주어질 때, 경주로를 건설하는데 필요한 최소 비용을 return 하도록 solution 함수를 완성해주세요.</p>\n<hr>\n<h2 id=\"제한사항\" style=\"position:relative;\"><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\" 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<ul>\n<li>board는 2차원 정사각 배열로 배열의 크기는 3 이상 25 이하입니다.</li>\n<li>board 배열의 각 원소의 값은 0 또는 1 입니다.\n<ul>\n<li>도면의 가장 왼쪽 상단 좌표는 (0, 0)이며, 가장 우측 하단 좌표는 (N-1, N-1) 입니다.</li>\n<li>원소의 값 0은 칸이 비어 있어 도로 연결이 가능함을 1은 칸이 벽으로 채워져 있어 도로 연결이 불가능함을 나타냅니다.</li>\n</ul>\n</li>\n<li>board는 항상 출발점에서 도착점까지 경주로를 건설할 수 있는 형태로 주어집니다.</li>\n<li>출발점과 도착점 칸의 원소의 값은 항상 0으로 주어집니다.</li>\n</ul>\n<hr>\n<h2 id=\"입출력-예\" style=\"position:relative;\"><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\" 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<table>\n<thead>\n<tr>\n<th>board</th>\n<th>result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>[[0,0,0],[0,0,0],[0,0,0]]</td>\n<td>900</td>\n</tr>\n<tr>\n<td>[[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]]</td>\n<td>3800</td>\n</tr>\n<tr>\n<td>[[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]]</td>\n<td>2100</td>\n</tr>\n<tr>\n<td>[[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[0,1,0,0,0,1],[0,0,0,0,0,0]]</td>\n<td>3200</td>\n</tr>\n</tbody>\n</table>\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>BFS, DP</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 comment\"># BFS 탐색</span>\n    q <span class=\"token operator\">=</span> deque<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    q<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">,</span> cost<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">while</span> q<span class=\"token punctuation\">:</span>\n        x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">,</span> cost <span class=\"token operator\">=</span> q<span class=\"token punctuation\">.</span>popleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            next_x<span class=\"token punctuation\">,</span> next_y <span class=\"token operator\">=</span> x <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> y <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\n            <span class=\"token comment\"># boundary 안이고 벽이 아닌 경우</span>\n            <span class=\"token keyword\">if</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> next_x <span class=\"token operator\">&lt;</span> N <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> next_y <span class=\"token operator\">&lt;</span> N <span class=\"token keyword\">and</span> board<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n                <span class=\"token comment\"># 직선 도로 비용 추가</span>\n                next_cost <span class=\"token operator\">=</span> cost <span class=\"token operator\">+</span> <span class=\"token number\">100</span>\n                <span class=\"token comment\"># 방향이 달라지면 코너 비용 추가</span>\n                <span class=\"token keyword\">if</span> d <span class=\"token operator\">!=</span> i <span class=\"token keyword\">and</span> d <span class=\"token operator\">!=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n                    next_cost <span class=\"token operator\">+=</span> <span class=\"token number\">500</span>\n                <span class=\"token comment\"># 해당 cost_list 값보다 작으면 업데이트하고 append</span>\n                <span class=\"token keyword\">if</span> next_cost <span class=\"token operator\">&lt;</span> cost_list<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                    cost_list<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> next_cost\n                    q<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>next_x<span class=\"token punctuation\">,</span> next_y<span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">,</span> next_cost<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    answer <span class=\"token operator\">=</span> <span class=\"token builtin\">min</span><span class=\"token punctuation\">(</span>cost_list<span class=\"token punctuation\">[</span>N<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>N<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li><strong>cost_list에 누적 최소 비용을 저장하면서 BFS 탐색</strong><br>\nboundary 안이고 벽이 아닌 경우에는 직선 도로 비용을 더해서 <code class=\"language-text\">next_cost</code>에 저장하고,<br>\n만약 방향이 달라진 경우에는 코너 비용도 추가해서 저장해준다.<br>\n해당 <code class=\"language-text\">cost_list[next_y][next_x][i]</code> 값보다 <code class=\"language-text\">next_cost</code> 값이 작으면 <code class=\"language-text\">cost_list</code> 값을 업데이트하고 <strong>deque</strong>에 <strong>append</strong>해준다.<br>\n마지막 위치에 해당하는 <code class=\"language-text\">cost_list</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\">from</span> collections <span class=\"token keyword\">import</span> deque\n<span class=\"token keyword\">import</span> sys\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">solution</span><span class=\"token punctuation\">(</span>board<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    answer<span class=\"token punctuation\">,</span> N <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>board<span class=\"token punctuation\">)</span>\n    dx <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    dy <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    cost_list <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span>sys<span class=\"token punctuation\">.</span>maxsize <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\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>   <span class=\"token comment\"># y좌표, x좌표, 방향에 해당하는 누적 최소 비용 저장</span>\n    x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">,</span> cost <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span>\n    <span class=\"token comment\"># BFS 탐색</span>\n    q <span class=\"token operator\">=</span> deque<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    q<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">,</span> cost<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">while</span> q<span class=\"token punctuation\">:</span>\n        x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">,</span> cost <span class=\"token operator\">=</span> q<span class=\"token punctuation\">.</span>popleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            next_x<span class=\"token punctuation\">,</span> next_y <span class=\"token operator\">=</span> x <span class=\"token operator\">+</span> dx<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> y <span class=\"token operator\">+</span> dy<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\n            <span class=\"token comment\"># boundary 안이고 벽이 아닌 경우</span>\n            <span class=\"token keyword\">if</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> next_x <span class=\"token operator\">&lt;</span> N <span class=\"token keyword\">and</span> <span class=\"token number\">0</span> <span class=\"token operator\">&lt;=</span> next_y <span class=\"token operator\">&lt;</span> N <span class=\"token keyword\">and</span> board<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n                <span class=\"token comment\"># 직선 도로 비용 추가</span>\n                next_cost <span class=\"token operator\">=</span> cost <span class=\"token operator\">+</span> <span class=\"token number\">100</span>\n                <span class=\"token comment\"># 방향이 달라지면 코너 비용 추가</span>\n                <span class=\"token keyword\">if</span> d <span class=\"token operator\">!=</span> i <span class=\"token keyword\">and</span> d <span class=\"token operator\">!=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n                    next_cost <span class=\"token operator\">+=</span> <span class=\"token number\">500</span>\n                <span class=\"token comment\"># 해당 cost_list 값보다 작으면 업데이트 하고 append</span>\n                <span class=\"token keyword\">if</span> next_cost <span class=\"token operator\">&lt;</span> cost_list<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                    cost_list<span class=\"token punctuation\">[</span>next_y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>next_x<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> next_cost\n                    q<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>next_x<span class=\"token punctuation\">,</span> next_y<span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">,</span> next_cost<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    answer <span class=\"token operator\">=</span> <span class=\"token builtin\">min</span><span class=\"token punctuation\">(</span>cost_list<span class=\"token punctuation\">[</span>N<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>N<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> answer</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><strong>BFS</strong>를 사용해야겠다는 생각은 처음부터 하고 구현을 했고, 하다가 해당 경로의 최소 누적 비용을 저장할 필요성을 느껴서 <strong>DP</strong>도 섞어서 구현을 했다.<br>\n시간은 조금 걸렸지만 구현을 다 하고 확인을 하니 계속 마지막 테스트 케이스만 틀려서 다른 사람들의 힌트를 확인했다..<br>\n해당 좌표에 대해서만 최소 누적 비용을 저장하고 비교하는 것이 아니라 <code class=\"language-text\">방향</code>에 따라 다르게 저장을 할 필요가 있다고 해서 <code class=\"language-text\">cost_list</code> 리스트를 <strong>3차원</strong>으로 변경하니까 통과,,<br>\n카카오 4번 문제부터는 확실히 난이도가 올라가는 것 같다,,</p>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#2020-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%9D%B8%ED%84%B4%EC%8B%AD\">[2020 카카오 인턴십]</a></li>\n<li><a href=\"#%EB%AC%B8%EC%A0%9C\">문제</a></li>\n<li><a href=\"#%EC%A0%9C%ED%95%9C%EC%82%AC%ED%95%AD\">제한사항</a></li>\n<li><a href=\"#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88\">입출력 예</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":"May 02, 2022","title":"[Programmers] 67259번: 경주로 건설 (Python)","categories":"Algorithm","author":"JFe","emoji":"💻"},"fields":{"slug":"/pg-67259/"}},"site":{"siteMetadata":{"siteUrl":"https://jfelog.netlify.app","comments":{"utterances":{"repo":"Go-Jaecheol/Jfe_Blog"}}}}},"pageContext":{"slug":"/pg-67258/","nextSlug":"/pg-67257/","prevSlug":"/pg-67259/"}},
    "staticQueryHashes": ["1073350324","1956554647","2938748437"]}