{"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":"c0a33f05-3685-5294-b7bd-9223579b6466","html":"<h1>2448번 : 별 찍기 - 11</h1>\n<p>👉 <a href=\"https://www.acmicpc.net/problem/2448\">문제 바로가기</a></p>\n<h2>배경 지식</h2>\n<ul>\n<li><code class=\"language-text\">프랙탈(자기 닮음 도형)</code> : <strong>자기유사성</strong>을 갖는 기하학적 구조; 어떤 도형의 작은 일부를 확대 했을 때 전체 모습이 똑같이 반복되는 도형</li>\n<li><code class=\"language-text\">재귀 함수</code> : 함수에서 자신을 다시 호출하는 <strong>재귀호출(recursive call)</strong> 작업을 수행하는 함수</li>\n</ul>\n<h2>푼 방법</h2>\n<p>별 찍기 문제 중 규칙 찾기에 가장 고민을 많이한 문제이다.</p>\n<p>프랙탈 구조로 이루어진 삼각형이다. <strong>큰삼각형 안에 동일한 구조의 작은 삼각형이 세 꼭지점에 반복되는 구조</strong>다.</p>\n<p>재귀함수를 이용, <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\n<span class=\"token keyword\">char</span> star<span class=\"token punctuation\">[</span><span class=\"token number\">3072</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span><span class=\"token number\">3072</span><span class=\"token operator\">*</span><span class=\"token number\">2</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">void</span> <span class=\"token function\">print_star</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> n<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> x<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> y<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 현 삼각형 높이, 현 삼각형 맨 위 꼭지점의 x 좌표, 현 삼각형 맨 위 꼭지점의 y 좌표</span>\n\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>n <span class=\"token operator\">==</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// 높이가 3이면 단위 삼각형 출력</span>\n\t\tstar<span class=\"token punctuation\">[</span>y<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'*'</span><span class=\"token punctuation\">;</span>\n\t\tstar<span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'*'</span><span class=\"token punctuation\">;</span>\n\t\tstar<span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'*'</span><span class=\"token punctuation\">;</span>\n\t\tstar<span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'*'</span><span class=\"token punctuation\">;</span>\n\t\tstar<span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'*'</span><span class=\"token punctuation\">;</span>\n\t\tstar<span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'*'</span><span class=\"token punctuation\">;</span>\n\t\tstar<span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'*'</span><span class=\"token punctuation\">;</span>\n\t\tstar<span class=\"token punctuation\">[</span>y<span class=\"token operator\">+</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>x<span class=\"token operator\">+</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'*'</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\t\n\t<span class=\"token function\">print_star</span><span class=\"token punctuation\">(</span>n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 현 삼각형의 윗 꼭지점 작은 삼각형 출력</span>\n\t<span class=\"token function\">print_star</span><span class=\"token punctuation\">(</span>n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> x<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> y<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><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 현 삼각형의 왼쪽 아래 꼭지점 작은 삼각형 출력</span>\n\t<span class=\"token function\">print_star</span><span class=\"token punctuation\">(</span>n<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> x<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> y<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><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 현 삼각형의 오른쪽 아래 꼭지점 작은 삼각형 출력</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>\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> <span class=\"token comment\">// 배열 초기화</span>\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> n<span class=\"token operator\">*</span><span class=\"token number\">2</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>j<span class=\"token punctuation\">)</span>\n\t\t\tstar<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">' '</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\n\t<span class=\"token function\">print_star</span><span class=\"token punctuation\">(</span>n<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 number\">0</span><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\">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> <span class=\"token comment\">// 출력</span>\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> n<span class=\"token operator\">*</span><span class=\"token number\">2</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>j<span class=\"token punctuation\">)</span>\n\t\t\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cout <span class=\"token operator\">&lt;&lt;</span> star<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 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\">'\\n'</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</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>\n<h3>References</h3>\n<p><a href=\"https://m.blog.naver.com/alwaysneoi/100135570568\">https://m.blog.naver.com/alwaysneoi/100135570568</a></p>","fields":{"tagSlugs":["/tags/백준/","/tags/algorithm/"],"slug":"/posts/baekjoons/2448/"},"frontmatter":{"title":"[백준] 2448 : 별 찍기 - 11","tags":["백준","Algorithm"],"date":"2020-03-19","description":"백준 2448번 문제 : 별 찍기 - 11"}}},"pageContext":{"slug":"/posts/baekjoons/2448/"}}