<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=223.62.229.104</id>
	<title>ZeroWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=223.62.229.104"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php/Special:Contributions/223.62.229.104"/>
	<updated>2026-05-14T16:57:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=1R/2015_09_12&amp;diff=25933</id>
		<title>1R/2015 09 12</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=1R/2015_09_12&amp;diff=25933"/>
		<updated>2016-09-12T15:50:10Z</updated>

		<summary type="html">&lt;p&gt;223.62.229.104: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 오늘의 문제 =&lt;br /&gt;
* [https://www.acmicpc.net/problem/2250|트리의 높이와 너비]&lt;br /&gt;
&lt;br /&gt;
= 참가자 =&lt;br /&gt;
* 15이원준&lt;br /&gt;
= 코드 =&lt;br /&gt;
== 15이원준 ==&lt;br /&gt;
 #include&amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 using namespace std;&lt;br /&gt;
  &lt;br /&gt;
 int level[20000][2] = {0, };&lt;br /&gt;
 int arr[20000][2];&lt;br /&gt;
 int ex[20000][2] = { 0, };&lt;br /&gt;
 int myNum[20000] = {0, };&lt;br /&gt;
 int maxDep = 0;&lt;br /&gt;
 int checkNum(int child){&lt;br /&gt;
   if(arr[child][0] != -1){&lt;br /&gt;
     ex[child][0] = checkNum(arr[child][0]);&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[child][1] != -1){&lt;br /&gt;
     ex[child][1] = checkNum(arr[child][1]);&lt;br /&gt;
   }&lt;br /&gt;
   return ex[child][0] + ex[child][1] + 1;&lt;br /&gt;
 }&lt;br /&gt;
 void fill(int now){&lt;br /&gt;
   if(arr[now][0] != -1){&lt;br /&gt;
     myNum[arr[now][0]] = myNum[now] - ex[arr[now][0]][1] - 1;&lt;br /&gt;
     fill(arr[now][0]);&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[now][1] != -1){&lt;br /&gt;
     myNum[arr[now][1]] = myNum[now] + ex[arr[now][1]][0] + 1;&lt;br /&gt;
     fill(arr[now][1]);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 void answer(int dep, int now){&lt;br /&gt;
   if(dep &amp;amp;gt; maxDep){&lt;br /&gt;
     maxDep = dep;&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[now][0] != -1){&lt;br /&gt;
     if(myNum[arr[now][0]] &amp;amp;lt; level[dep][0]){&lt;br /&gt;
       level[dep][0] = myNum[arr[now][0]];&lt;br /&gt;
     }&lt;br /&gt;
     if(myNum[arr[now][0]] &amp;amp;gt; level[dep][1]){&lt;br /&gt;
       level[dep][1] = myNum[arr[now][0]];&lt;br /&gt;
     }&lt;br /&gt;
     answer(dep + 1, arr[now][0]);&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[now][1] != -1){&lt;br /&gt;
     if(myNum[arr[now][1]] &amp;amp;lt; level[dep][0]){&lt;br /&gt;
       level[dep][0] = myNum[arr[now][1]];&lt;br /&gt;
     }&lt;br /&gt;
     if(myNum[arr[now][1]] &amp;amp;gt; level[dep][1]){&lt;br /&gt;
       level[dep][1] = myNum[arr[now][1]];&lt;br /&gt;
     }&lt;br /&gt;
     answer(dep + 1, arr[now][1]);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 int main(){&lt;br /&gt;
   int N, root = -1;&lt;br /&gt;
   cin&amp;amp;gt;&amp;amp;gt;N;&lt;br /&gt;
   for(int i = 1; i&amp;amp;lt;=N; i++){&lt;br /&gt;
     level[i][0] = N+1;&lt;br /&gt;
     level[i][1] = -1;&lt;br /&gt;
     ex[i][0] = 0;&lt;br /&gt;
     ex[i][1] = 0;&lt;br /&gt;
     int a;&lt;br /&gt;
     cin&amp;amp;gt;&amp;amp;gt; a;&lt;br /&gt;
     cin&amp;amp;gt;&amp;amp;gt; arr[a][0] &amp;amp;gt;&amp;amp;gt; arr[a][1];&lt;br /&gt;
     arr[arr[a][0]][0] = -1;&lt;br /&gt;
     arr[arr[a][0]][1] = -1;&lt;br /&gt;
     arr[arr[a][1]][0] = -1;&lt;br /&gt;
     arr[arr[a][1]][1] = -1;&lt;br /&gt;
     if(arr[a][0] == root || arr[a][1] == root || root == -1){&lt;br /&gt;
       root = a;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   ex[root][0] = checkNum(arr[root][0]);&lt;br /&gt;
   ex[root][1] = checkNum(arr[root][1]);&lt;br /&gt;
   myNum[root] = ex[root][0] + 1;&lt;br /&gt;
   fill(root);&lt;br /&gt;
   level[1][0] = myNum[root];&lt;br /&gt;
   level[1][1] = myNum[root];&lt;br /&gt;
   answer(2, root);&lt;br /&gt;
   int max = 0, bigLevel = 0;&lt;br /&gt;
   for(int i = 1; i&amp;amp;lt;maxDep; i++){&lt;br /&gt;
     int tmp = level[i][1] - level[i][0] + 1;&lt;br /&gt;
     if(max &amp;amp;lt; tmp){&lt;br /&gt;
       bigLevel = i;&lt;br /&gt;
       max = tmp;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   cout&amp;amp;lt;&amp;amp;lt; bigLevel &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot; &amp;amp;lt;&amp;amp;lt; max;&lt;br /&gt;
 }&lt;br /&gt;
== 박인서 ==&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 #define LEN 10001&lt;br /&gt;
 &lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int tree[LEN][2], maxgap[LEN], mingap[LEN];&lt;br /&gt;
 int cnt = 0, maxdep = 0;&lt;br /&gt;
 &lt;br /&gt;
 //왼쪽자식-&amp;amp;gt;자기자신-&amp;amp;gt;오른쪽 자식 순으로 cnt를 세가며 위치를 지정(너비도 같이 생각)&lt;br /&gt;
 void solve(int node, int depth)&lt;br /&gt;
 {&lt;br /&gt;
 	//초기화 및 maxdep 설정&lt;br /&gt;
 	if (depth&amp;amp;gt;maxdep) maxdep = depth, mingap[depth] = 1001, maxgap[depth] = -1;&lt;br /&gt;
 	if (tree[node][0] != -1) solve(tree[node][0], depth + 1);//왼쪽 자식 호출&lt;br /&gt;
 	cnt++;//node 1개 증가&lt;br /&gt;
 		  //maxgap,mingap 설정&lt;br /&gt;
 	if (mingap[depth]&amp;amp;gt;cnt) mingap[depth] = cnt;&lt;br /&gt;
 	if (maxgap[depth]&amp;amp;lt;cnt) maxgap[depth] = cnt;&lt;br /&gt;
 	if (tree[node][1] != -1) solve(tree[node][1], depth + 1);//오른쪽 자식 호출&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
 	int num, root;&lt;br /&gt;
 	//입력&lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; num;&lt;br /&gt;
 	for (int i = 1; i &amp;amp;lt;= num; i++)&lt;br /&gt;
 	{&lt;br /&gt;
 		int a;&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; a;&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; tree[a][0] &amp;amp;gt;&amp;amp;gt; tree[a][1];&lt;br /&gt;
 		if (i==1 || tree[a][0] == root || tree[a][1] == root) root = a;&lt;br /&gt;
 	}&lt;br /&gt;
 	//함수 번호 매기기&lt;br /&gt;
 	solve(root, 1);&lt;br /&gt;
 	//너비가 가장 큰 것 찾기&lt;br /&gt;
 	int res = -1, index = 0;&lt;br /&gt;
 	for (int i = 1; i &amp;amp;lt;= maxdep; i++)&lt;br /&gt;
 		if (res&amp;amp;lt;maxgap[i] - mingap[i]) res = maxgap[i] - mingap[i], index = i;&lt;br /&gt;
 	//출력&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; index &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot; &amp;amp;lt;&amp;amp;lt; res + 1 &amp;amp;lt;&amp;amp;lt; &#039;\n&#039;;&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== 곽정흠 ==&lt;br /&gt;
&lt;br /&gt;
= 아이디어 =&lt;br /&gt;
== 15이원준 ==&lt;br /&gt;
# 루트를 찾으면 모든 입력을 저장한다.(arr에 저장)&lt;br /&gt;
# 각각의 노드들의 왼쪽에 연결된 노드들의 수와 오른쪽에 연결된 노드들의 수를 구한다.(ex에 저장)&lt;br /&gt;
# root노드의 열 넘버는 자신의 왼쪽에 연결된 노드들의 수 + 1 이다.(myNum에 저장)&lt;br /&gt;
# 각 노드의 왼쪽노드의 열 넘버 = (자신의 열넘버) - (왼쪽노드의 오른쪽에 연결된 노드들의 수) - 1 이다. (myNum에 저장)&lt;br /&gt;
# 각 노드의 오른쪽노드의 열 넘버 = (자신의 열넘버) + (오른쪽노드의 왼쪽에 연결된 노드들의 수) + 1 이다.(myNum에 저장)&lt;br /&gt;
# 행에서 가장 왼쪽에 있는 노드의 열넘버와 가장 오른쪽에 있는 노드의 열넘버를 저장한다.(level에 저장)&lt;br /&gt;
# 각 행의 너비를 구하고 가장 큰 값을 찾아 그 행의 번호와 너비를 출력한다.&lt;br /&gt;
== 박인서 ==&lt;br /&gt;
 1. 이 문제를 어떻게 해야 할 것인가?&lt;br /&gt;
 일단 노드의 갯수가 1000개 이하이므로 일일히 노드에 대하여 탐색을 하여도 시간이 부족하지는 않다. 따라서 일일이 탐색을 하는 것을 목적으로 한다.&lt;br /&gt;
 &lt;br /&gt;
 2. 중위순회란 무엇인가?&lt;br /&gt;
 위키 페이지를 참고하여주세요.&lt;br /&gt;
 https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%A6%AC_%EC%88%9C%ED%9A%8C&lt;br /&gt;
 &lt;br /&gt;
 3. 그러면 이 문제는 어떻게 해결해야 되는가?&lt;br /&gt;
 이 문제에서 열 번호가 왼쪽자식-&amp;amp;gt;자기자신-&amp;amp;gt;오른쪽자식(중위순회) 순서로 되어 있다. 따라서, 이를 따라서 함수를 호출하여 번호를 매긴다. 그리고 depth에 따라서 배열에 열 번호의 최소값과 최대값을 저장하여 해결 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 곽정흠 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>223.62.229.104</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=1R/2015_09_12&amp;diff=25932</id>
		<title>1R/2015 09 12</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=1R/2015_09_12&amp;diff=25932"/>
		<updated>2016-09-12T15:49:39Z</updated>

		<summary type="html">&lt;p&gt;223.62.229.104: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 오늘의 문제 =&lt;br /&gt;
* [https://www.acmicpc.net/problem/2250|트리의 높이와 너비]&lt;br /&gt;
&lt;br /&gt;
= 참가자 =&lt;br /&gt;
* 15이원준&lt;br /&gt;
= 코드 =&lt;br /&gt;
== 15이원준 ==&lt;br /&gt;
 #include&amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 using namespace std;&lt;br /&gt;
  &lt;br /&gt;
 int level[20000][2] = {0, };&lt;br /&gt;
 int arr[20000][2];&lt;br /&gt;
 int ex[20000][2] = { 0, };&lt;br /&gt;
 int myNum[20000] = {0, };&lt;br /&gt;
 int maxDep = 0;&lt;br /&gt;
 int checkNum(int child){&lt;br /&gt;
   if(arr[child][0] != -1){&lt;br /&gt;
     ex[child][0] = checkNum(arr[child][0]);&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[child][1] != -1){&lt;br /&gt;
     ex[child][1] = checkNum(arr[child][1]);&lt;br /&gt;
   }&lt;br /&gt;
   return ex[child][0] + ex[child][1] + 1;&lt;br /&gt;
 }&lt;br /&gt;
 void fill(int now){&lt;br /&gt;
   if(arr[now][0] != -1){&lt;br /&gt;
     myNum[arr[now][0]] = myNum[now] - ex[arr[now][0]][1] - 1;&lt;br /&gt;
     fill(arr[now][0]);&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[now][1] != -1){&lt;br /&gt;
     myNum[arr[now][1]] = myNum[now] + ex[arr[now][1]][0] + 1;&lt;br /&gt;
     fill(arr[now][1]);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 void answer(int dep, int now){&lt;br /&gt;
   if(dep &amp;amp;gt; maxDep){&lt;br /&gt;
     maxDep = dep;&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[now][0] != -1){&lt;br /&gt;
     if(myNum[arr[now][0]] &amp;amp;lt; level[dep][0]){&lt;br /&gt;
       level[dep][0] = myNum[arr[now][0]];&lt;br /&gt;
     }&lt;br /&gt;
     if(myNum[arr[now][0]] &amp;amp;gt; level[dep][1]){&lt;br /&gt;
       level[dep][1] = myNum[arr[now][0]];&lt;br /&gt;
     }&lt;br /&gt;
     answer(dep + 1, arr[now][0]);&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[now][1] != -1){&lt;br /&gt;
     if(myNum[arr[now][1]] &amp;amp;lt; level[dep][0]){&lt;br /&gt;
       level[dep][0] = myNum[arr[now][1]];&lt;br /&gt;
     }&lt;br /&gt;
     if(myNum[arr[now][1]] &amp;amp;gt; level[dep][1]){&lt;br /&gt;
       level[dep][1] = myNum[arr[now][1]];&lt;br /&gt;
     }&lt;br /&gt;
     answer(dep + 1, arr[now][1]);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 int main(){&lt;br /&gt;
   int N, root = -1;&lt;br /&gt;
   cin&amp;amp;gt;&amp;amp;gt;N;&lt;br /&gt;
   for(int i = 1; i&amp;amp;lt;=N; i++){&lt;br /&gt;
     level[i][0] = N+1;&lt;br /&gt;
     level[i][1] = -1;&lt;br /&gt;
     ex[i][0] = 0;&lt;br /&gt;
     ex[i][1] = 0;&lt;br /&gt;
     int a;&lt;br /&gt;
     cin&amp;amp;gt;&amp;amp;gt; a;&lt;br /&gt;
     cin&amp;amp;gt;&amp;amp;gt; arr[a][0] &amp;amp;gt;&amp;amp;gt; arr[a][1];&lt;br /&gt;
     arr[arr[a][0]][0] = -1;&lt;br /&gt;
     arr[arr[a][0]][1] = -1;&lt;br /&gt;
     arr[arr[a][1]][0] = -1;&lt;br /&gt;
     arr[arr[a][1]][1] = -1;&lt;br /&gt;
     if(arr[a][0] == root || arr[a][1] == root || root == -1){&lt;br /&gt;
       root = a;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   ex[root][0] = checkNum(arr[root][0]);&lt;br /&gt;
   ex[root][1] = checkNum(arr[root][1]);&lt;br /&gt;
   myNum[root] = ex[root][0] + 1;&lt;br /&gt;
   fill(root);&lt;br /&gt;
   level[1][0] = myNum[root];&lt;br /&gt;
   level[1][1] = myNum[root];&lt;br /&gt;
   answer(2, root);&lt;br /&gt;
   int max = 0, bigLevel = 0;&lt;br /&gt;
   for(int i = 1; i&amp;amp;lt;maxDep; i++){&lt;br /&gt;
     int tmp = level[i][1] - level[i][0] + 1;&lt;br /&gt;
     if(max &amp;amp;lt; tmp){&lt;br /&gt;
       bigLevel = i;&lt;br /&gt;
       max = tmp;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   cout&amp;amp;lt;&amp;amp;lt; bigLevel &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot; &amp;amp;lt;&amp;amp;lt; max;&lt;br /&gt;
 }&lt;br /&gt;
== 박인서 ==&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 #define LEN 10001&lt;br /&gt;
 &lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int tree[LEN][2], maxgap[LEN], mingap[LEN];&lt;br /&gt;
 int cnt = 0, maxdep = 0;&lt;br /&gt;
 &lt;br /&gt;
 //왼쪽자식-&amp;amp;gt;자기자신-&amp;amp;gt;오른쪽 자식 순으로 cnt를 세가며 위치를 지정(너비도 같이 생각)&lt;br /&gt;
 void solve(int node, int depth)&lt;br /&gt;
 {&lt;br /&gt;
 	//초기화 및 maxdep 설정&lt;br /&gt;
 	if (depth&amp;amp;gt;maxdep) maxdep = depth, mingap[depth] = 1001, maxgap[depth] = -1;&lt;br /&gt;
 	if (tree[node][0] != -1) solve(tree[node][0], depth + 1);//왼쪽 자식 호출&lt;br /&gt;
 	cnt++;//node 1개 증가&lt;br /&gt;
 		  //maxgap,mingap 설정&lt;br /&gt;
 	if (mingap[depth]&amp;amp;gt;cnt) mingap[depth] = cnt;&lt;br /&gt;
 	if (maxgap[depth]&amp;amp;lt;cnt) maxgap[depth] = cnt;&lt;br /&gt;
 	if (tree[node][1] != -1) solve(tree[node][1], depth + 1);//오른쪽 자식 호출&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
 	int num, root;&lt;br /&gt;
 	//입력&lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; num;&lt;br /&gt;
 	for (int i = 1; i &amp;amp;lt;= num; i++)&lt;br /&gt;
 	{&lt;br /&gt;
 		int a;&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; a;&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; tree[a][0] &amp;amp;gt;&amp;amp;gt; tree[a][1];&lt;br /&gt;
 		if (i==1 || tree[a][0] == root || tree[a][1] == root) root = a;&lt;br /&gt;
 	}&lt;br /&gt;
 	//함수 번호 매기기&lt;br /&gt;
 	solve(root, 1);&lt;br /&gt;
 	//너비가 가장 큰 것 찾기&lt;br /&gt;
 	int res = -1, index = 0;&lt;br /&gt;
 	for (int i = 1; i &amp;amp;lt;= maxdep; i++)&lt;br /&gt;
 		if (res&amp;amp;lt;maxgap[i] - mingap[i]) res = maxgap[i] - mingap[i], index = i;&lt;br /&gt;
 	//출력&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; index &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot; &amp;amp;lt;&amp;amp;lt; res + 1 &amp;amp;lt;&amp;amp;lt; &#039;\n&#039;;&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== 곽정흠 ==&lt;br /&gt;
&lt;br /&gt;
= 아이디어 =&lt;br /&gt;
== 15이원준 ==&lt;br /&gt;
# 루트를 찾으면 모든 입력을 저장한다.(arr에 저장)&lt;br /&gt;
# 각각의 노드들의 왼쪽에 연결된 노드들의 수와 오른쪽에 연결된 노드들의 수를 구한다.(ex에 저장)&lt;br /&gt;
# root노드의 열 넘버는 자신의 왼쪽에 연결된 노드들의 수 + 1 이다.(myNum에 저장)&lt;br /&gt;
# 각 노드의 왼쪽노드의 열 넘버 = (자신의 열넘버) - (왼쪽노드의 오른쪽에 연결된 노드들의 수) - 1 이다. (myNum에 저장)&lt;br /&gt;
# 각 노드의 오른쪽노드의 열 넘버 = (자신의 열넘버) + (오른쪽노드의 왼쪽에 연결된 노드들의 수) + 1 이다.(myNum에 저장)&lt;br /&gt;
# 행에서 가장 왼쪽에 있는 노드의 열넘버와 가장 오른쪽에 있는 노드의 열넘버를 저장한다.(level에 저장)&lt;br /&gt;
# 각 행의 너비를 구하고 가장 큰 값을 찾아 그 행의 번호와 너비를 출력한다.&lt;br /&gt;
== 박인서 ==&lt;br /&gt;
 1. 이 문제를 어떻게 해야 할 것인가?&lt;br /&gt;
 &lt;br /&gt;
 일단 노드의 갯수가 1000개 이하이므로 일일히 노드에 대하여 탐색을 하여도 시간이 부족하지는 않다. 따라서 일일이 탐색을 하는 것을 목적으로 한다.&lt;br /&gt;
 2. 중위순회란 무엇인가?&lt;br /&gt;
 &lt;br /&gt;
 위키 페이지를 참고하여주세요.&lt;br /&gt;
 https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%A6%AC_%EC%88%9C%ED%9A%8C&lt;br /&gt;
 3. 그러면 이 문제는 어떻게 해결해야 되는가?&lt;br /&gt;
 &lt;br /&gt;
 이 문제에서 열 번호가 왼쪽자식-&amp;amp;gt;자기자신-&amp;amp;gt;오른쪽자식(중위순회) 순서로 되어 있다. 따라서, 이를 따라서 함수를 호출하여 번호를 매긴다. 그리고 depth에 따라서 배열에 열 번호의 최소값과 최대값을 저장하여 해결 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 곽정흠 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>223.62.229.104</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=1R/2015_09_12&amp;diff=25931</id>
		<title>1R/2015 09 12</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=1R/2015_09_12&amp;diff=25931"/>
		<updated>2016-09-12T15:40:07Z</updated>

		<summary type="html">&lt;p&gt;223.62.229.104: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= 오늘의 문제 =&lt;br /&gt;
* [https://www.acmicpc.net/problem/2250|트리의 높이와 너비]&lt;br /&gt;
&lt;br /&gt;
= 참가자 =&lt;br /&gt;
* 15이원준&lt;br /&gt;
= 코드 =&lt;br /&gt;
== 15이원준 ==&lt;br /&gt;
 #include&amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 using namespace std;&lt;br /&gt;
  &lt;br /&gt;
 int level[20000][2] = {0, };&lt;br /&gt;
 int arr[20000][2];&lt;br /&gt;
 int ex[20000][2] = { 0, };&lt;br /&gt;
 int myNum[20000] = {0, };&lt;br /&gt;
 int maxDep = 0;&lt;br /&gt;
 int checkNum(int child){&lt;br /&gt;
   if(arr[child][0] != -1){&lt;br /&gt;
     ex[child][0] = checkNum(arr[child][0]);&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[child][1] != -1){&lt;br /&gt;
     ex[child][1] = checkNum(arr[child][1]);&lt;br /&gt;
   }&lt;br /&gt;
   return ex[child][0] + ex[child][1] + 1;&lt;br /&gt;
 }&lt;br /&gt;
 void fill(int now){&lt;br /&gt;
   if(arr[now][0] != -1){&lt;br /&gt;
     myNum[arr[now][0]] = myNum[now] - ex[arr[now][0]][1] - 1;&lt;br /&gt;
     fill(arr[now][0]);&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[now][1] != -1){&lt;br /&gt;
     myNum[arr[now][1]] = myNum[now] + ex[arr[now][1]][0] + 1;&lt;br /&gt;
     fill(arr[now][1]);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 void answer(int dep, int now){&lt;br /&gt;
   if(dep &amp;amp;gt; maxDep){&lt;br /&gt;
     maxDep = dep;&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[now][0] != -1){&lt;br /&gt;
     if(myNum[arr[now][0]] &amp;amp;lt; level[dep][0]){&lt;br /&gt;
       level[dep][0] = myNum[arr[now][0]];&lt;br /&gt;
     }&lt;br /&gt;
     if(myNum[arr[now][0]] &amp;amp;gt; level[dep][1]){&lt;br /&gt;
       level[dep][1] = myNum[arr[now][0]];&lt;br /&gt;
     }&lt;br /&gt;
     answer(dep + 1, arr[now][0]);&lt;br /&gt;
   }&lt;br /&gt;
   if(arr[now][1] != -1){&lt;br /&gt;
     if(myNum[arr[now][1]] &amp;amp;lt; level[dep][0]){&lt;br /&gt;
       level[dep][0] = myNum[arr[now][1]];&lt;br /&gt;
     }&lt;br /&gt;
     if(myNum[arr[now][1]] &amp;amp;gt; level[dep][1]){&lt;br /&gt;
       level[dep][1] = myNum[arr[now][1]];&lt;br /&gt;
     }&lt;br /&gt;
     answer(dep + 1, arr[now][1]);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 int main(){&lt;br /&gt;
   int N, root = -1;&lt;br /&gt;
   cin&amp;amp;gt;&amp;amp;gt;N;&lt;br /&gt;
   for(int i = 1; i&amp;amp;lt;=N; i++){&lt;br /&gt;
     level[i][0] = N+1;&lt;br /&gt;
     level[i][1] = -1;&lt;br /&gt;
     ex[i][0] = 0;&lt;br /&gt;
     ex[i][1] = 0;&lt;br /&gt;
     int a;&lt;br /&gt;
     cin&amp;amp;gt;&amp;amp;gt; a;&lt;br /&gt;
     cin&amp;amp;gt;&amp;amp;gt; arr[a][0] &amp;amp;gt;&amp;amp;gt; arr[a][1];&lt;br /&gt;
     arr[arr[a][0]][0] = -1;&lt;br /&gt;
     arr[arr[a][0]][1] = -1;&lt;br /&gt;
     arr[arr[a][1]][0] = -1;&lt;br /&gt;
     arr[arr[a][1]][1] = -1;&lt;br /&gt;
     if(arr[a][0] == root || arr[a][1] == root || root == -1){&lt;br /&gt;
       root = a;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   ex[root][0] = checkNum(arr[root][0]);&lt;br /&gt;
   ex[root][1] = checkNum(arr[root][1]);&lt;br /&gt;
   myNum[root] = ex[root][0] + 1;&lt;br /&gt;
   fill(root);&lt;br /&gt;
   level[1][0] = myNum[root];&lt;br /&gt;
   level[1][1] = myNum[root];&lt;br /&gt;
   answer(2, root);&lt;br /&gt;
   int max = 0, bigLevel = 0;&lt;br /&gt;
   for(int i = 1; i&amp;amp;lt;maxDep; i++){&lt;br /&gt;
     int tmp = level[i][1] - level[i][0] + 1;&lt;br /&gt;
     if(max &amp;amp;lt; tmp){&lt;br /&gt;
       bigLevel = i;&lt;br /&gt;
       max = tmp;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   cout&amp;amp;lt;&amp;amp;lt; bigLevel &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot; &amp;amp;lt;&amp;amp;lt; max;&lt;br /&gt;
 }&lt;br /&gt;
== 박인서 ==&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 #define LEN 10001&lt;br /&gt;
 &lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int tree[LEN][2], maxgap[LEN], mingap[LEN];&lt;br /&gt;
 int cnt = 0, maxdep = 0;&lt;br /&gt;
 &lt;br /&gt;
 //왼쪽자식-&amp;amp;gt;자기자신-&amp;amp;gt;오른쪽 자식 순으로 cnt를 세가며 위치를 지정(너비도 같이 생각)&lt;br /&gt;
 void solve(int node, int depth)&lt;br /&gt;
 {&lt;br /&gt;
 	//초기화 및 maxdep 설정&lt;br /&gt;
 	if (depth&amp;amp;gt;maxdep) maxdep = depth, mingap[depth] = 1001, maxgap[depth] = -1;&lt;br /&gt;
 	if (tree[node][0] != -1) solve(tree[node][0], depth + 1);//왼쪽 자식 호출&lt;br /&gt;
 	cnt++;//node 1개 증가&lt;br /&gt;
 		  //maxgap,mingap 설정&lt;br /&gt;
 	if (mingap[depth]&amp;amp;gt;cnt) mingap[depth] = cnt;&lt;br /&gt;
 	if (maxgap[depth]&amp;amp;lt;cnt) maxgap[depth] = cnt;&lt;br /&gt;
 	if (tree[node][1] != -1) solve(tree[node][1], depth + 1);//오른쪽 자식 호출&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
 	int num, root;&lt;br /&gt;
 	//입력&lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; num;&lt;br /&gt;
 	for (int i = 1; i &amp;amp;lt;= num; i++)&lt;br /&gt;
 	{&lt;br /&gt;
 		int a;&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; a;&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; tree[a][0] &amp;amp;gt;&amp;amp;gt; tree[a][1];&lt;br /&gt;
 		if (i==1 || tree[a][0] == root || tree[a][1] == root) root = a;&lt;br /&gt;
 	}&lt;br /&gt;
 	//함수 번호 매기기&lt;br /&gt;
 	solve(root, 1);&lt;br /&gt;
 	//너비가 가장 큰 것 찾기&lt;br /&gt;
 	int res = -1, index = 0;&lt;br /&gt;
 	for (int i = 1; i &amp;amp;lt;= maxdep; i++)&lt;br /&gt;
 		if (res&amp;amp;lt;maxgap[i] - mingap[i]) res = maxgap[i] - mingap[i], index = i;&lt;br /&gt;
 	//출력&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; index &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot; &amp;amp;lt;&amp;amp;lt; res + 1 &amp;amp;lt;&amp;amp;lt; &#039;\n&#039;;&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== 곽정흠 ==&lt;br /&gt;
&lt;br /&gt;
= 아이디어 =&lt;br /&gt;
== 15이원준 ==&lt;br /&gt;
# 루트를 찾으면 모든 입력을 저장한다.(arr에 저장)&lt;br /&gt;
# 각각의 노드들의 왼쪽에 연결된 노드들의 수와 오른쪽에 연결된 노드들의 수를 구한다.(ex에 저장)&lt;br /&gt;
# root노드의 열 넘버는 자신의 왼쪽에 연결된 노드들의 수 + 1 이다.(myNum에 저장)&lt;br /&gt;
# 각 노드의 왼쪽노드의 열 넘버 = (자신의 열넘버) - (왼쪽노드의 오른쪽에 연결된 노드들의 수) - 1 이다. (myNum에 저장)&lt;br /&gt;
# 각 노드의 오른쪽노드의 열 넘버 = (자신의 열넘버) + (오른쪽노드의 왼쪽에 연결된 노드들의 수) + 1 이다.(myNum에 저장)&lt;br /&gt;
# 행에서 가장 왼쪽에 있는 노드의 열넘버와 가장 오른쪽에 있는 노드의 열넘버를 저장한다.(level에 저장)&lt;br /&gt;
# 각 행의 너비를 구하고 가장 큰 값을 찾아 그 행의 번호와 너비를 출력한다.&lt;br /&gt;
== 박인서 ==&lt;br /&gt;
== 곽정흠 ==&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>223.62.229.104</name></author>
	</entry>
</feed>