{"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":"0be80c48-b8d8-5406-b48a-6e52ad1c37e2","html":"<h1>2004번 : 조합 0의 개수</h1>\n<p>👉 <a href=\"https://www.acmicpc.net/problem/2004\">문제 바로가기</a></p>\n<h2>배경 지식</h2>\n<ul>\n<li><code class=\"language-text\">이항 계수</code> : 주어진 크기 집합에서 원하는 개수만큼 <strong>순서없이</strong> 뽑는 조합의 가짓 수</li>\n<li><code class=\"language-text\">소인수분해</code> : 합성수를 소수의 곱으로 나타내는 방법; 소인수를 구하는 것</li>\n</ul>\n<h2>푼 방법</h2>\n<p>푸는 방법은 저번 ‘1676번 : 팩토리얼 0의 개수’와 동일하다.</p>\n<p>이번에는 저번과 다르게 시간복잡도를 줄이기 위해 이항 계수(조합)의 소인수 5의 개수만 가지고 문제를 해결하려 했지만, 정답이 아니었다. 왜일까? 반례를 하나 들어보자.</p>\n<p>ㅤㅤㅤㅤㅤㅤㅤㅤ<strong>5C1 = 5! / (4! x 1!)</strong></p>\n<p>위 조합에서 소인수 5의 개수만 구해서 0의 개수라고 해버리면 ‘1’이라는 답이 나온다. 하지만 실제로는 ‘0’이 나오는게 맞다; <strong>소인수 5가 1개, 소인수 2가 0개이기 때문에 2와 5의 쌍이 없어 조합 결과값의 뒷자리에 0을 만들 수 없다.</strong></p>\n<p>그러므로 <strong>n!의 소인수 2의 개수 - ( k!의 소인수 2의 개수 + (n-k)!의 소인수 2의 개수 )</strong>와 <strong>n!의 소인수 5의 개수 - ( k!의 소인수 5의 개수 + (n-k)!의 소인수 5의 개수 )</strong>의 <strong>쌍의 개수</strong>를 구하면 된다.</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;cmath></span></span>\n\n<span class=\"token keyword\">int</span> <span class=\"token function\">get_min</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> a<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> b<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">return</span> a <span class=\"token operator\">></span> b <span class=\"token operator\">?</span> b <span class=\"token punctuation\">:</span> a<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</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> k<span class=\"token punctuation\">,</span> n_5 <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> k_5 <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> n_k_5 <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token keyword\">int</span> n_2 <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> k_2 <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> n_k_2 <span class=\"token operator\">=</span> <span class=\"token number\">0</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> k<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\">1</span><span class=\"token punctuation\">;</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> n<span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>i<span class=\"token punctuation\">)</span> <span class=\"token comment\">// n! 소인수 5의 개수</span>\n\t\tn_5 <span class=\"token operator\">+</span><span class=\"token operator\">=</span> n <span class=\"token operator\">/</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\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\">1</span><span class=\"token punctuation\">;</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> n<span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>i<span class=\"token punctuation\">)</span> <span class=\"token comment\">// n! 소인수 2의 개수</span>\n\t\tn_2 <span class=\"token operator\">+</span><span class=\"token operator\">=</span> n <span class=\"token operator\">/</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span><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\">1</span><span class=\"token punctuation\">;</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> k<span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>i<span class=\"token punctuation\">)</span> <span class=\"token comment\">// k! 소인수 5의 개수</span>\n\t\tk_5 <span class=\"token operator\">+</span><span class=\"token operator\">=</span> k <span class=\"token operator\">/</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span><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\">1</span><span class=\"token punctuation\">;</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> k<span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>i<span class=\"token punctuation\">)</span> <span class=\"token comment\">// k! 소인수 2의 개수</span>\n\t\tk_2 <span class=\"token operator\">+</span><span class=\"token operator\">=</span> k <span class=\"token operator\">/</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span><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\">1</span><span class=\"token punctuation\">;</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token punctuation\">(</span>n<span class=\"token operator\">-</span>k<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>i<span class=\"token punctuation\">)</span> <span class=\"token comment\">// (n-k)! 소인수 5의 개수</span>\n\t\tn_k_5 <span class=\"token operator\">+</span><span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>n<span class=\"token operator\">-</span>k<span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span><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\">1</span><span class=\"token punctuation\">;</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token punctuation\">(</span>n<span class=\"token operator\">-</span>k<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>i<span class=\"token punctuation\">)</span> <span class=\"token comment\">// (n-k)! 소인수 2의 개수</span>\n\t\tn_k_2 <span class=\"token operator\">+</span><span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>n<span class=\"token operator\">-</span>k<span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><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>cout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token function\">get_min</span><span class=\"token punctuation\">(</span>n_5 <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span>k_5 <span class=\"token operator\">+</span> n_k_5<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> n_2 <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span>k_2 <span class=\"token operator\">+</span> n_k_2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;&lt;</span> std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>endl<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 소인수 2와 5의 쌍의 개수 </span>\n    \n    <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/2004/"},"frontmatter":{"title":"[백준] 2004 : 조합 0의 개수","tags":["백준","Algorithm"],"date":"2020-03-23","description":"백준 2004번 문제 : 조합 0의 개수"}}},"pageContext":{"slug":"/posts/baekjoons/2004/"}}