{"data":{"site":{"siteMetadata":{"title":"HOME | blackpudding","subtitle":"고생했어. 오늘도.","copyright":"© All rights reserved.","author":{"name":"William JO","github":"blackpudding96"},"disqusShortname":"blackpudding","url":"https://blackpudding.netlify.com"}},"markdownRemark":{"id":"c9350da4-4d78-5b28-925d-db8209654cad","html":"<h1>1940번 : 주몽</h1>\n<p>👉 <a href=\"https://www.acmicpc.net/problem/1940\">문제 바로가기</a></p>\n<h2>배경 지식</h2>\n<ul>\n<li><code class=\"language-text\">이진 탐색(Binary Search)</code> : 오름차순 혹은 내림차순(일반적으로 오름차순)으로 <strong>정렬된 리스트</strong>에서 특정한 값의 위치를 찾는 알고리즘; <strong>중앙 값을 선택</strong>하여 <strong>대소 비교 후 범위를 갱신하고 특정 값을 찾을 때까지 계속 범위를 갱신하며 중간 값을 찾아나가는 알고리즘</strong></li>\n</ul>\n<h2>푼 방법</h2>\n<p>재료의 고유 값을 리스트(배열)에 저장하고 <strong>오름차순 정렬</strong>한 후, <strong>리스트의 끝부터 처음까지 각각 M에서 뺀 값</strong>을 <strong>이진 탐색(Binary Search) 알고리즘을 사용하여 리스트에서 찾는다.</strong> <strong>존재할 경우</strong> 갑옷을 만들 수 있으니 <strong>갑옷 개수는 증가</strong>하고 존재하지 않을 경우 갑옷을 만들 수 없으니 <strong>갑옷 개수는 유지된다.</strong></p>\n<p>이진 탐색의 범위를 계속해서 줄이는 이유는 <strong>갑옷 개수 count의 중복을 피하기 위해서</strong>이다.</p>\n<p>이진 탐색 알고리즘은 직접 구현하지 않고 c++ 표준 라이브러리인 algorithm 라이브러리에 미리 작성된 함수를 사용하였다. 이진 탐색은 따로 정리해서 포스팅하고 그 포스트에서는 직접 구현해볼 예정이다.</p>\n<h2>내 정답 코드 (C++)</h2>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token macro property\">#<span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;iostream></span></span>\n<span class=\"token macro property\">#<span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;algorithm></span></span>\n\n<span class=\"token keyword\">int</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>ios<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">sync_with_stdio</span><span class=\"token punctuation\">(</span>false<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cin<span class=\"token punctuation\">.</span><span class=\"token function\">tie</span><span class=\"token punctuation\">(</span><span class=\"token constant\">NULL</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> \n\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cout<span class=\"token punctuation\">.</span><span class=\"token function\">tie</span><span class=\"token punctuation\">(</span><span class=\"token constant\">NULL</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\n\t<span class=\"token keyword\">int</span> N<span class=\"token punctuation\">,</span> M<span class=\"token punctuation\">,</span> result <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> nums<span class=\"token punctuation\">[</span><span class=\"token number\">15000</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\t\n\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cin <span class=\"token operator\">>></span> N <span class=\"token operator\">>></span> M<span class=\"token punctuation\">;</span>\n\t\n\t<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> N<span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>i<span class=\"token punctuation\">)</span>\n\t\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cin <span class=\"token operator\">>></span> nums<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\t\n\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">sort</span><span class=\"token punctuation\">(</span>nums<span class=\"token punctuation\">,</span> nums<span class=\"token operator\">+</span>N<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\n\t<span class=\"token keyword\">while</span> <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 punctuation\">{</span>\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">binary_search</span><span class=\"token punctuation\">(</span>nums<span class=\"token punctuation\">,</span> nums<span class=\"token operator\">+</span>N<span class=\"token punctuation\">,</span> M <span class=\"token operator\">-</span> nums<span class=\"token punctuation\">[</span>N<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\t\t\t<span class=\"token operator\">++</span>result<span class=\"token punctuation\">;</span>\n\t\t\n\t\t<span class=\"token operator\">--</span>N<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cout <span class=\"token operator\">&lt;&lt;</span> result <span class=\"token operator\">&lt;&lt;</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>endl<span class=\"token punctuation\">;</span>\n\t\n\t<span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","fields":{"tagSlugs":["/tags/백준/","/tags/algorithm/"],"slug":"/posts/baekjoons/1940/"},"frontmatter":{"title":"[백준] 1940 : 주몽","tags":["백준","Algorithm"],"date":"2020-04-18","description":"백준 1940번 문제 : 주몽"}}},"pageContext":{"slug":"/posts/baekjoons/1940/"}}