{"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":"3c0b71a0-e9af-5e01-b267-6b9f9ee592c0","html":"<h1>4949번 : 균형잡힌 세상</h1>\n<p>👉 <a href=\"https://www.acmicpc.net/problem/4949\">문제 바로가기</a></p>\n<h2>배경 지식</h2>\n<ul>\n<li><code class=\"language-text\">스택(Stack)</code> : 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)</li>\n</ul>\n<h2>푼 방법</h2>\n<p>역시 알고리즘 문제를 풀 때 독해력도 중요한 것 같다. 알고보면 매우 간단하고 명료한 문제이지만, 설명을 엄청 풀어쓰고 애매모호하게 써놔서 문제 이해에 시간을 꽤 투자하게 되는 상황이 빈번히 벌어진다.(본인만 그럴수도..)</p>\n<p>이번 문제도 stack을 활용하여 푸는 문제이다. <strong>주어진 각각의 문장에서 ’()‘와 ’[]’ 의 짝이 맞는지</strong> 즉, <strong>균형을 이루는지</strong> 확인하면 된다.</p>\n<p><strong>’(’ &#x26; ’[’</strong> 은 <strong>stack에 push</strong>하고 <strong>’)’ &#x26; ’]’</strong> 이면 <strong>stack에서 pop</strong>해서 <strong>짝이 맞는지 확인</strong>한다.</p>\n<p><strong>문장의 끝까지 가서 각각의 짝이 맞고, stack이 비워져 있으면</strong> 그 문장은 <strong>균형을 이룬것</strong>이다; <strong>그 외 나머지 경우는 ‘no’로 출력</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;string></span></span>\n\ntemplate <span class=\"token operator\">&lt;</span>typename T<span class=\"token operator\">></span>\nclass Stack <span class=\"token punctuation\">{</span>\nprivate<span class=\"token punctuation\">:</span>\n\tT <span class=\"token operator\">*</span>data<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 데이터 배열(arr)</span>\n\t<span class=\"token keyword\">int</span> capacity<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 스택의 크기</span>\n\t<span class=\"token keyword\">int</span> top_idx<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 스택 맨 위 인덱스 = 제일 최근 인덱스</span>\n\t\npublic<span class=\"token punctuation\">:</span>\n\t<span class=\"token comment\">//생성자</span>\n\t<span class=\"token function\">Stack</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> capacity <span class=\"token operator\">=</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">:</span> <span class=\"token function\">data</span><span class=\"token punctuation\">(</span>new T<span class=\"token punctuation\">[</span>capacity<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">capacity</span><span class=\"token punctuation\">(</span>capacity<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">top_idx</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 punctuation\">{</span><span class=\"token punctuation\">}</span>\n\t\n\t<span class=\"token comment\">//소멸자</span>\n\t<span class=\"token operator\">~</span><span class=\"token function\">Stack</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>delete<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> data<span class=\"token punctuation\">;</span><span class=\"token punctuation\">}</span>\n\t\n\t<span class=\"token keyword\">void</span> <span class=\"token function\">push</span><span class=\"token punctuation\">(</span>T value<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token function\">is_full</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\t\t\tthis<span class=\"token operator\">-></span>data<span class=\"token punctuation\">[</span><span class=\"token operator\">++</span><span class=\"token punctuation\">(</span>this<span class=\"token operator\">-></span>top_idx<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> value<span class=\"token punctuation\">;</span>\n\t\t<span class=\"token keyword\">else</span>\n\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\">\"Stack is full.\"</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>\n\t<span class=\"token punctuation\">}</span>\n\t\n\tT <span class=\"token function\">pop</span><span class=\"token punctuation\">(</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>this<span class=\"token operator\">-></span>top_idx <span class=\"token operator\">!=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n\t\t\t<span class=\"token keyword\">return</span> this<span class=\"token operator\">-></span>data<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>this<span class=\"token operator\">-></span>top_idx<span class=\"token punctuation\">)</span><span class=\"token operator\">--</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token keyword\">else</span>\n\t\t\t<span class=\"token keyword\">return</span> this<span class=\"token operator\">-></span>top_idx<span class=\"token punctuation\">;</span> <span class=\"token comment\">//std::cout &lt;&lt; \"Stack is empty.\" &lt;&lt; std::endl;</span>\n\t<span class=\"token punctuation\">}</span>\n\t\n\t<span class=\"token keyword\">int</span> <span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>this<span class=\"token operator\">-></span>top_idx<span class=\"token punctuation\">)</span><span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\t\n\tbool <span class=\"token function\">is_empty</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>this<span class=\"token operator\">-></span>top_idx <span class=\"token operator\">==</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> true <span class=\"token punctuation\">:</span> false<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\t\n\tT <span class=\"token function\">top</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>this<span class=\"token operator\">-></span>top_idx <span class=\"token operator\">==</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span> <span class=\"token punctuation\">:</span> this<span class=\"token operator\">-></span>data<span class=\"token punctuation\">[</span>this<span class=\"token operator\">-></span>top_idx<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\t\n\tbool <span class=\"token function\">is_full</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t<span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>this<span class=\"token operator\">-></span>top_idx <span class=\"token operator\">==</span> this<span class=\"token operator\">-></span>capacity<span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> true <span class=\"token punctuation\">:</span> false<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n\t\n\tfriend std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>ostream<span class=\"token operator\">&amp;</span> operator <span class=\"token operator\">&lt;&lt;</span><span class=\"token punctuation\">(</span>std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>ostream <span class=\"token operator\">&amp;</span>out<span class=\"token punctuation\">,</span> Stack<span class=\"token operator\">&lt;</span>T<span class=\"token operator\">></span> <span class=\"token operator\">&amp;</span>stack<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n\t\tT <span class=\"token operator\">*</span>temp <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">;</span>\n\t\tout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token string\">\"┌───┐\"</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>\n\t\t<span class=\"token keyword\">for</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>top_idx<span class=\"token punctuation\">;</span> i <span class=\"token operator\">>=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> <span class=\"token operator\">--</span>i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n\t\t\tout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token string\">\"  \"</span> <span class=\"token operator\">&lt;&lt;</span> temp<span class=\"token punctuation\">[</span>i<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>\n\t\t<span class=\"token punctuation\">}</span>\n\t\tout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token string\">\"└───┘\"</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>\n\t\t<span class=\"token keyword\">return</span> out<span class=\"token punctuation\">;</span>\n\t<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><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\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>string sentence<span class=\"token punctuation\">;</span>\n\t\n\t<span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\tStack<span class=\"token operator\">&lt;</span><span class=\"token keyword\">char</span><span class=\"token operator\">></span> stack<span class=\"token punctuation\">;</span>\n\t\tbool is_balanced <span class=\"token operator\">=</span> true<span class=\"token punctuation\">;</span>\n\t\tstd<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">getline</span><span class=\"token punctuation\">(</span>std<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span>cin<span class=\"token punctuation\">,</span> sentence<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>sentence <span class=\"token operator\">==</span> <span class=\"token string\">\".\"</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// 입력 종료 조건</span>\n\t\t\t<span class=\"token keyword\">break</span><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> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> sentence<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>i<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>sentence<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'('</span> <span class=\"token operator\">||</span> sentence<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">'['</span><span class=\"token punctuation\">)</span>\n\t\t\t\tstack<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span>sentence<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t<span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>sentence<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">')'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t\t\t<span class=\"token keyword\">char</span> ch <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span><span class=\"token function\">pop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>ch <span class=\"token operator\">!=</span> <span class=\"token string\">'('</span><span class=\"token punctuation\">)</span>\n\t\t\t\t\tis_balanced <span class=\"token operator\">=</span> false<span class=\"token punctuation\">;</span>\n\t\t\t<span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>sentence<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token string\">']'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t\t\t<span class=\"token keyword\">char</span> ch <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span><span class=\"token function\">pop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t\t\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>ch <span class=\"token operator\">!=</span> <span class=\"token string\">'['</span><span class=\"token punctuation\">)</span>\n\t\t\t\t\tis_balanced <span class=\"token operator\">=</span> false<span class=\"token punctuation\">;</span>\n\t\t\t<span class=\"token punctuation\">}</span>\n\t\t<span class=\"token punctuation\">}</span>\n\t\t\n\t\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>stack<span class=\"token punctuation\">.</span><span class=\"token function\">is_empty</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;&amp;</span> is_balanced<span class=\"token punctuation\">)</span> <span class=\"token comment\">// stack is empty &amp;&amp; pairs balanced</span>\n\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\">\"yes\"</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token string\">'\\n'</span><span class=\"token punctuation\">;</span>\n\t\t<span class=\"token keyword\">else</span>\n\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\">\"no\"</span> <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\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/4949/"},"frontmatter":{"title":"[백준] 4949 : 균형잡힌 세상","tags":["백준","Algorithm"],"date":"2020-03-27","description":"백준 4949번 문제 : 균형잡힌 세상"}}},"pageContext":{"slug":"/posts/baekjoons/4949/"}}