{"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":"97fb8b87-ac06-511e-874d-3e0861eea29b","html":"<h1>1992번 : 쿼드트리</h1>\n<p>👉 <a href=\"https://www.acmicpc.net/problem/1992\">문제 바로가기</a></p>\n<h2>배경 지식</h2>\n<ul>\n<li>\n<p><code class=\"language-text\">분할 정복(Divide and Conquer)</code> : 그대로 해결할 수 없는 주어진 문제를 <strong>더 이상 문제를 나눌 수 없을 때까지 둘 이상의 작은 부분 문제로 분할하여 문제를 해결</strong>하고, <strong>구해진 문제들을 원 문제로 병합하여 해결</strong>하는 알고리즘</p>\n</li>\n<li>\n<p><code class=\"language-text\">쿼드 트리(Quad Tree)</code> : 트리 자료구조 중 하나로 <strong>부모 노드 아래 자식 노드를 4개(Quad)씩</strong> 가지고 있는 트리</p>\n</li>\n</ul>\n<h2>푼 방법</h2>\n<p>지난 포스트의 ‘2630 - 색종이 만들기’ 문제와 매우 유사하다.</p>\n<p>영상 데이터 배열을 입력받고, 4분할 정복 재귀 함수를 구현한다. <strong>분할한 문제에서 white dot(0) 이나 black dot(1) 로만 이루어져 있지 않을 경우 계속 분할</strong>한다; <strong>더 이상 나누어 질 수 없을 때까지 계속 진행하여(= n : 1)</strong> white dot(0) 으로만 이루어진 분할 문제에서는 0을 출력하고, black dot(1) 로만 이루어진 분할 문제에서는 1을 출력한다.</p>\n<p>2630번 문제와 한가지 다른 점이 있다면, 분할 문제에 대해서는 괄호로 구분을 해줘야 하는 것인데, 분할이 시작되고 끝날 때 괄호를 출력해주면 된다. </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;string></span></span>\n\nbool video<span class=\"token punctuation\">[</span><span class=\"token number\">64</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span><span class=\"token number\">64</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">void</span> daq <span class=\"token punctuation\">(</span><span class=\"token keyword\">const</span> <span class=\"token keyword\">int</span><span class=\"token operator\">&amp;</span> row_idx<span class=\"token punctuation\">,</span> <span class=\"token keyword\">const</span> <span class=\"token keyword\">int</span><span class=\"token operator\">&amp;</span> col_idx<span class=\"token punctuation\">,</span> <span class=\"token keyword\">const</span> <span class=\"token keyword\">int</span><span class=\"token operator\">&amp;</span> n<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\tbool dot_colour <span class=\"token operator\">=</span> video<span class=\"token punctuation\">[</span>row_idx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>col_idx<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> r <span class=\"token operator\">=</span> row_idx<span class=\"token punctuation\">;</span> r <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span>n<span class=\"token operator\">+</span>row_idx<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>r<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> c <span class=\"token operator\">=</span> col_idx<span class=\"token punctuation\">;</span> c <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span>n<span class=\"token operator\">+</span>col_idx<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>c<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>video<span class=\"token punctuation\">[</span>r<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>c<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> dot_colour<span class=\"token punctuation\">)</span>\n\t\t\t\t<span class=\"token keyword\">continue</span><span class=\"token punctuation\">;</span>\n\t\t\t<span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n\t\t\t\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token string\">\"(\"</span><span class=\"token punctuation\">;</span>\n\t\t\t\t\n\t\t\t\t<span class=\"token function\">daq</span><span class=\"token punctuation\">(</span>row_idx<span class=\"token punctuation\">,</span> col_idx<span class=\"token punctuation\">,</span> n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 왼쪽 위</span>\n\t\t\t\t<span class=\"token function\">daq</span><span class=\"token punctuation\">(</span>row_idx<span class=\"token punctuation\">,</span> col_idx <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span>n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 오른쪽 위</span>\n\t\t\t\t<span class=\"token function\">daq</span><span class=\"token punctuation\">(</span>row_idx <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span>n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> col_idx<span class=\"token punctuation\">,</span> n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 왼쪽 아래</span>\n\t\t\t\t<span class=\"token function\">daq</span><span class=\"token punctuation\">(</span>row_idx <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span>n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> col_idx <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span>n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 오른쪽 아래</span>\n\t\t\t\t\n\t\t\t\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token string\">\")\"</span><span class=\"token punctuation\">;</span>\n\t\t\t\t\n\t\t\t\t<span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n\t\t\t<span class=\"token punctuation\">}</span>\n\t\t<span class=\"token punctuation\">}</span>\n\t<span class=\"token punctuation\">}</span>\n\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>dot_colour<span class=\"token punctuation\">)</span>\n\t\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token string\">\"1\"</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token keyword\">else</span>\n\t\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token string\">\"0\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\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>\n\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>string temp<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 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> <span class=\"token punctuation\">{</span>\n\t\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cin <span class=\"token operator\">>></span> temp<span class=\"token punctuation\">;</span>\n\t\t\n\t\t<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> j <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> j <span class=\"token operator\">&lt;</span> temp<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>j<span class=\"token punctuation\">)</span>\n\t\t\tvideo<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> temp<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> <span class=\"token string\">'0'</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\t\n\t<span class=\"token function\">daq</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> n<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> 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>\n<h3>References</h3>\n<p><a href=\"https://m.blog.naver.com/PostView.nhn?blogId=qkfkf123&#x26;logNo=60179360083&#x26;proxyReferer=https:%2F%2Fwww.google.com%2F\">https://m.blog.naver.com/PostView.nhn?blogId=qkfkf123&#x26;logNo=60179360083&#x26;proxyReferer=https:%2F%2Fwww.google.com%2F</a><br>\n<a href=\"https://chessire.tistory.com/entry/%EC%BF%BC%EB%93%9C%ED%8A%B8%EB%A6%ACQuad-tree\">https://chessire.tistory.com/entry/%EC%BF%BC%EB%93%9C%ED%8A%B8%EB%A6%ACQuad-tree</a><br>\n<a href=\"https://minho331.tistory.com/6\">https://minho331.tistory.com/6</a></p>","fields":{"tagSlugs":["/tags/백준/","/tags/algorithm/"],"slug":"/posts/baekjoons/1992/"},"frontmatter":{"title":"[백준] 1992 : 쿼드트리","tags":["백준","Algorithm"],"date":"2020-04-16","description":"백준 1992번 문제 : 쿼드트리"}}},"pageContext":{"slug":"/posts/baekjoons/1992/"}}