{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-2252-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"fc267d43-0498-50ca-917a-43870a3efb81","excerpt":"n명의 학생들을 키 순서대로 줄을 세울 때, 두 학생의 키를 비교하여 세울려고 한다. 일부 학생들의 키를 비교한 결과가 주어졌을 때 해당 결과를 출력하는 문제. 위상정렬을 이용하여 풀었다. 위상정렬이란 방향성을 가지는 그래프인 유향 그래프이자 사이클이 없는 그래프에서 사용할 수 있다. 진입차수 그리고 스택나 큐를 이용하여 구현할 수 있는데 해당 문제에서는 큐를 이용하여 구현하였다. 입력되는 비교 결과를 이용해 인접 리스트 형태의 그래프를 구현, 진입차수를 저장하였다. 진입차수가…","html":"<p>n명의 학생들을 키 순서대로 줄을 세울 때, 두 학생의 키를 비교하여 세울려고 한다. 일부 학생들의 키를 비교한 결과가 주어졌을 때 해당 결과를 출력하는 문제. 위상정렬을 이용하여 풀었다. 위상정렬이란 방향성을 가지는 그래프인 유향 그래프이자 사이클이 없는 그래프에서 사용할 수 있다. 진입차수 그리고 스택나 큐를 이용하여 구현할 수 있는데 해당 문제에서는 큐를 이용하여 구현하였다. 입력되는 비교 결과를 이용해 인접 리스트 형태의 그래프를 구현, 진입차수를 저장하였다. 진입차수가 0인 (제익 작은) 학생을 기준으로 q를 형성, popleft한 후 해당 학생보다 큰 학생들의 진입차수를 감소, 진입차수가 0이 되었을 때 q에 추가하여 풀었다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> collections <span class=\"token keyword\">import</span> deque\n<span class=\"token keyword\">import</span> sys\n<span class=\"token builtin\">input</span> <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline\n\nn<span class=\"token punctuation\">,</span> m <span class=\"token operator\">=</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>\ntree <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><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 punctuation\">]</span> <span class=\"token comment\"># 트리</span>\nindegree <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span> <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><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 punctuation\">]</span> <span class=\"token comment\"># 진입차수</span>\n\n<span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    small<span class=\"token punctuation\">,</span> big <span class=\"token operator\">=</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>\n    tree<span class=\"token punctuation\">[</span>small<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>big<span class=\"token punctuation\">)</span>\n    indegree<span class=\"token punctuation\">[</span>big<span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> <span class=\"token number\">1</span> <span class=\"token comment\"># 진입차수 추가</span>\n\nq <span class=\"token operator\">=</span> deque<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nans <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token comment\"># 정답</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><span class=\"token number\">1</span><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 punctuation\">:</span>\n    <span class=\"token keyword\">if</span> indegree<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 진입차수가 0인 (제일 작은) 정점 추가</span>\n        q<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">while</span> q<span class=\"token punctuation\">:</span>\n    now <span class=\"token operator\">=</span> q<span class=\"token punctuation\">.</span>popleft<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    ans<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>now<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> <span class=\"token builtin\">next</span> <span class=\"token keyword\">in</span> tree<span class=\"token punctuation\">[</span>now<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 현재 노드보다 큰 정점들</span>\n        indegree<span class=\"token punctuation\">[</span><span class=\"token builtin\">next</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-=</span> <span class=\"token number\">1</span> <span class=\"token comment\"># 해동 노드의 진입차수를 줄임</span>\n        <span class=\"token keyword\">if</span> indegree<span class=\"token punctuation\">[</span><span class=\"token builtin\">next</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 줄였을 때 0일 시, 큐에 추가</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\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>ans<span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-2252 - Python","date":"March 06, 2021"}}},"pageContext":{"slug":"/Algorithm/BOJ-2252-Python/","previous":{"fields":{"slug":"/Algorithm/프로그래머스-N으로표현-Python/"},"frontmatter":{"title":"프로그래머스-N으로표현 - Python","category":"Algorithm","draft":false}},"next":{"fields":{"slug":"/Algorithm/BOJ-1946-Python/"},"frontmatter":{"title":"BOJ-1946 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}