<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=3n_1%2F%EC%9D%B4%EB%8F%84%ED%98%84</id>
	<title>3n 1/이도현 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=3n_1%2F%EC%9D%B4%EB%8F%84%ED%98%84"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=3n_1/%EC%9D%B4%EB%8F%84%ED%98%84&amp;action=history"/>
	<updated>2026-05-15T12:20:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=3n_1/%EC%9D%B4%EB%8F%84%ED%98%84&amp;diff=26800&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:22, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=3n_1/%EC%9D%B4%EB%8F%84%ED%98%84&amp;diff=26800&amp;oldid=prev"/>
		<updated>2021-02-07T05:22:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==== 문제 ====&lt;br /&gt;
2005-12-30 14:39:20  Accepted 3.256 436 56031 C++ 100 - The 3n + 1 problem &lt;br /&gt;
&lt;br /&gt;
==== 소감 ====&lt;br /&gt;
처음으로 채점로봇에게서 Accepted라는 감격적인 메시지를 안겨준 문제.&lt;br /&gt;
정말 수도 없이 많은 시도를 했었다. 하지만 너무나도 꼼꼼하면서도 생각지 못한 테스트 케이스에 항상 좌절했다.&lt;br /&gt;
&lt;br /&gt;
==== 어려웠던 점 ====&lt;br /&gt;
# 입력 2개가 범위로 들어가는 데 단순히 첫 번째 입력이 클 것이라는 추측이 잘못되었다. (첫 번째 수가 큰 경우도 있었음)&lt;br /&gt;
# 비트연산자의 위력의 대단함을 느꼈다. 짝홀판별(&amp;amp; 연산자), 나누기2(right shift 1) - 수행속도가 엄청 향상됨.&lt;br /&gt;
# 알고리즘에 대한 명확한 파악이 루프 도는 횟수를 현저히 줄여줌을 배웠다. - 홀수 뒤엔 반드시 짝수가 온다.&lt;br /&gt;
# 첫 번째 당했던 입력의 순서 크기 문제가 출력에서도 다시 말썽 - 단순히 스왑을 시켜버림으로써 원래 입력이 망가지는 모습을 보였다.&lt;br /&gt;
&lt;br /&gt;
==== 코드 ====&lt;br /&gt;
 // The 3n + 1 problem&lt;br /&gt;
 // UVa ID : 100&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int cycle_length(int input);&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
 	int input1, input2;&lt;br /&gt;
 &lt;br /&gt;
 	while (cin &amp;amp;gt;&amp;amp;gt; input1 &amp;amp;gt;&amp;amp;gt; input2)&lt;br /&gt;
 	{&lt;br /&gt;
 		int i;&lt;br /&gt;
 		int max_count = -1;&lt;br /&gt;
 		int temp = 0;&lt;br /&gt;
 		&lt;br /&gt;
 		// 입력의 순서가 절대 뒤바뀌면 안된다!!&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; input1 &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot; &amp;amp;lt;&amp;amp;lt; input2 &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 		// 앞에 들어오는 입력이 뒤에 입력보다 더 클 경우 (for문 에러 방지)&lt;br /&gt;
 		if (input1 &amp;amp;gt; input2)&lt;br /&gt;
 		{&lt;br /&gt;
 			int swap = input1;&lt;br /&gt;
 			input1 = input2;&lt;br /&gt;
 			input2 = swap;&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		for (i = input1; i &amp;amp;lt;= input2; i++)&lt;br /&gt;
 		{&lt;br /&gt;
 			temp = cycle_length(i);				// cycle legnth 찾기&lt;br /&gt;
 			if (temp &amp;amp;gt; max_count)&lt;br /&gt;
 				max_count = temp;				// 큰 수를 max_count로&lt;br /&gt;
 		}&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; max_count &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // cycle length 구하기&lt;br /&gt;
 int cycle_length(int input)&lt;br /&gt;
 {&lt;br /&gt;
 	int argument = input;		// 전달인자로 넘어온 수 저장&lt;br /&gt;
 	int count = 0;				// 카운트 변수&lt;br /&gt;
 	&lt;br /&gt;
 	while (true)&lt;br /&gt;
 	{&lt;br /&gt;
 		// 종료 조건&lt;br /&gt;
 		if (argument == 1)&lt;br /&gt;
 		{&lt;br /&gt;
 			count++;&lt;br /&gt;
 			break;&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		// LSB가 0이면 짝수, 1이면 홀수이다.&lt;br /&gt;
 		if ((argument &amp;amp;amp; 1) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			// 나누기 2는 right shift를 한 번 하는 것과 같다.&lt;br /&gt;
 			argument &amp;amp;gt;&amp;amp;gt;= 1;&lt;br /&gt;
 			count++;&lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 		{&lt;br /&gt;
 			// 홀수라면 반드시 다음은 짝수가 온다.&lt;br /&gt;
 			argument = 3 * argument + 1;&lt;br /&gt;
 			argument &amp;amp;gt;&amp;amp;gt;= 1;&lt;br /&gt;
 			count += 2;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return count;&lt;br /&gt;
 }&lt;br /&gt;
==== 덧글 ====&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>