{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-1068-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"887c7b2f-b0bf-5d2e-94fb-7a6a37865be5","excerpt":"n개의 노드로 이루어진 트리를 각 노드의 부모들의 번호를 입력받으며 주어진다. 그 후 지울 노드 번호를 입력받으며 해당 트리의 리프 노드의 수를 출력하는 문제. 첫 풀이는 지워지지 않은 노드들을 저장하는 배열을 이용하여 확인하여 수를 세는 방식으로 하였으나, 지운 노드를 유일한 자식으로 가지고 있는 노드의 반례를 풀지 못했으며 dfs 연산을 두 번하는 과정이 필요없을 것 같아 다시 풀게 되었다. 두번째 풀이는 dfs…","html":"<p>n개의 노드로 이루어진 트리를 각 노드의 부모들의 번호를 입력받으며 주어진다. 그 후 지울 노드 번호를 입력받으며 해당 트리의 리프 노드의 수를 출력하는 문제. 첫 풀이는 지워지지 않은 노드들을 저장하는 배열을 이용하여 확인하여 수를 세는 방식으로 하였으나, 지운 노드를 유일한 자식으로 가지고 있는 노드의 반례를 풀지 못했으며 dfs 연산을 두 번하는 과정이 필요없을 것 같아 다시 풀게 되었다. 두번째 풀이는 dfs을 하며 노드의 자식이 없을 때 리프 노드라고 판단, 자식 노드를 큐에 추가할 때 삭제할 노드가 있으며 해당 노드의 길이가 1일 때도 리프 노드로 판단하는 부분을 넣어 풀었다. 수차례 괴롭히던 런타임 에러는 그래프를 먼저 생성하는 방식으로 해결하였다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># def dfs(start):</span>\n<span class=\"token comment\">#     q = [start]</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#     while q:</span>\n<span class=\"token comment\">#         node = q.pop()</span>\n<span class=\"token comment\">#         is_alive[node] = False</span>\n<span class=\"token comment\">#         for next in graph[node]:</span>\n<span class=\"token comment\">#             q.append(next)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># def lif(root):</span>\n<span class=\"token comment\">#     global ans</span>\n<span class=\"token comment\">#     q = [root]</span>\n<span class=\"token comment\">#     while q:</span>\n<span class=\"token comment\">#         node = q.pop()</span>\n<span class=\"token comment\">#         if graph[node] == [] and is_alive[node]:</span>\n<span class=\"token comment\">#             ans += 1</span>\n<span class=\"token comment\">#         elif len(graph[node]) and not is_alive[node]:</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\">#         else:</span>\n<span class=\"token comment\">#             for next in graph[node]:</span>\n<span class=\"token comment\">#                 q.append(next)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># n = int(input())</span>\n<span class=\"token comment\"># l = list(map(int, input().split()))</span>\n<span class=\"token comment\"># del_node = int(input())</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># is_alive = [True for _ in range(n)]</span>\n<span class=\"token comment\"># ans = 0</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># graph = {}</span>\n<span class=\"token comment\"># root = 0</span>\n<span class=\"token comment\"># for i in range(n):</span>\n<span class=\"token comment\">#     graph[i] = []</span>\n<span class=\"token comment\">#     if l[i] != -1:</span>\n<span class=\"token comment\">#         graph[l[i]].append(i)</span>\n<span class=\"token comment\">#     else:</span>\n<span class=\"token comment\">#         root = i</span>\n<span class=\"token comment\"># dfs(del_node)</span>\n<span class=\"token comment\"># lif(root)</span>\n<span class=\"token comment\">#</span>\n<span class=\"token comment\"># print(graph)</span>\n<span class=\"token comment\"># print(is_alive)</span>\n<span class=\"token comment\"># print(ans)</span>\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">count_lif</span><span class=\"token punctuation\">(</span>root<span class=\"token punctuation\">,</span> del_node<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">global</span> ans\n    q <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">if</span> del_node <span class=\"token operator\">!=</span> root<span class=\"token punctuation\">:</span>\n        q <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>root<span class=\"token punctuation\">]</span>\n\n    <span class=\"token keyword\">while</span> q<span class=\"token punctuation\">:</span>\n        node <span class=\"token operator\">=</span> q<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n        <span class=\"token keyword\">if</span> graph<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n            ans <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n\n        <span class=\"token keyword\">for</span> <span class=\"token builtin\">next</span> <span class=\"token keyword\">in</span> graph<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> <span class=\"token builtin\">next</span> <span class=\"token operator\">==</span> del_node<span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>graph<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n                    ans <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n            <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n                q<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token builtin\">next</span><span class=\"token punctuation\">)</span>\n\nn <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nl <span class=\"token operator\">=</span> <span class=\"token builtin\">list</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\ndel_node <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\nans <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\ngraph <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\nroot <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    graph<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> l<span class=\"token punctuation\">[</span>i<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>\n        graph<span class=\"token punctuation\">[</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n        root <span class=\"token operator\">=</span> i\n\ncount_lif<span class=\"token punctuation\">(</span>root<span class=\"token punctuation\">,</span> del_node<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>ans<span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-1068 - Python","date":"December 03, 2020"}}},"pageContext":{"slug":"/Algorithm/BOJ-1068-Python/","previous":{"fields":{"slug":"/Algorithm/BOJ-2263-Python/"},"frontmatter":{"title":"BOJ-2263 - Python","category":"Algorithm","draft":false}},"next":{"fields":{"slug":"/Algorithm/BOJ-2583-Python/"},"frontmatter":{"title":"BOJ-2583 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}