<?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=Randomwalk%2F%EC%A1%B0%EB%8F%99%EC%98%81</id>
	<title>Randomwalk/조동영 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=Randomwalk%2F%EC%A1%B0%EB%8F%99%EC%98%81"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Randomwalk/%EC%A1%B0%EB%8F%99%EC%98%81&amp;action=history"/>
	<updated>2026-05-14T16:43:57Z</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=Randomwalk/%EC%A1%B0%EB%8F%99%EC%98%81&amp;diff=38362&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:27, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Randomwalk/%EC%A1%B0%EB%8F%99%EC%98%81&amp;diff=38362&amp;oldid=prev"/>
		<updated>2021-02-07T05:27:52Z</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;= [[RandomWalk]]/[[조동영]] =&lt;br /&gt;
=== 2학년 1학기 자료구조 레포트용 ===&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt; &lt;br /&gt;
 #include &amp;amp;lt;ctime&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;iomanip&amp;amp;gt;&lt;br /&gt;
 using namespace std; &lt;br /&gt;
 &lt;br /&gt;
 void main(){&lt;br /&gt;
 &lt;br /&gt;
 	srand(time(0));&lt;br /&gt;
 	&lt;br /&gt;
 	//바퀴벌레를 8방향으로 이동하게 할 배열&lt;br /&gt;
 	int imove[] = {-1,0,1,1,1,0,-1,-1};&lt;br /&gt;
 	int jmove[] = {1,1,1,0,-1,-1,-1,0};&lt;br /&gt;
 	&lt;br /&gt;
 	// 방의 크기&lt;br /&gt;
 	int Xroom;&lt;br /&gt;
 	int Yroom;&lt;br /&gt;
 	&lt;br /&gt;
 	// 바퀴벌레의 좌표값&lt;br /&gt;
 	int ibug;&lt;br /&gt;
 	int jbug;&lt;br /&gt;
 	&lt;br /&gt;
 	int count = 0;		// 총이동한 횟수를 계산하게될 integer 값&lt;br /&gt;
 	bool existZero = false;		// 바퀴벌레가 모두 돌아다녔는지 확인할때 쓰일 bool형 값&lt;br /&gt;
 &lt;br /&gt;
 	int i,j;&lt;br /&gt;
 	&lt;br /&gt;
 	// 바퀴벌레가 돌아다닐 방을 생성&lt;br /&gt;
 	do{ &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;직사각형의 가로크기를 입력해주세요(2 &amp;amp;lt; X &amp;amp;lt;= 40) :&amp;quot;;&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; Xroom;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;직사각형의 세로크기를 입력해주세요(2 &amp;amp;lt;= Y &amp;amp;lt; 20) :&amp;quot;;&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; Yroom;&lt;br /&gt;
         if (Xroom &amp;amp;gt; 2 &amp;amp;amp;&amp;amp;amp; Xroom &amp;amp;lt; 41 &amp;amp;amp;&amp;amp;amp; Yroom &amp;amp;gt; 1 &amp;amp;amp;&amp;amp;amp; Yroom &amp;amp;lt; 21) &lt;br /&gt;
 			break; &lt;br /&gt;
         cout &amp;amp;lt;&amp;amp;lt; &amp;quot;세로, 가로의 크기의 범위를 벗어났네요. 다시 입력하세요.&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}while(true); &lt;br /&gt;
 &lt;br /&gt;
 	// 2중동적배열을 만드는 함수&lt;br /&gt;
 	int **room;&lt;br /&gt;
 &lt;br /&gt;
 	room = new int*[Xroom];&lt;br /&gt;
 &lt;br /&gt;
 	for (i=0; i&amp;amp;lt;Xroom; i++)&lt;br /&gt;
 		room[i] = new int[Yroom];&lt;br /&gt;
 	&lt;br /&gt;
 	// 생성한 동적배열을 초기화&lt;br /&gt;
 	for (i=0;i&amp;amp;lt;Xroom;i++)&lt;br /&gt;
 		for(j=0;j&amp;amp;lt;Yroom;j++)&lt;br /&gt;
 			room[i][j] =0;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	// 바퀴벌레를 생성하는 do ~ while 문&lt;br /&gt;
 	do{ &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;바퀴벌레의 초기값 X를 입력해주세요 :&amp;quot;;&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; ibug;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;바퀴벌레의 초기값 Y를 입력해주세요 :&amp;quot;;&lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; jbug;&lt;br /&gt;
 		if (ibug &amp;amp;gt;= 0 &amp;amp;amp;&amp;amp;amp; ibug &amp;amp;lt; Xroom &amp;amp;amp;&amp;amp;amp; jbug &amp;amp;gt;= 0 &amp;amp;amp;&amp;amp;amp; jbug &amp;amp;lt; Yroom) &lt;br /&gt;
 			break; &lt;br /&gt;
         cout &amp;amp;lt;&amp;amp;lt; &amp;quot;바퀴벌레가 방의 범위를 벗어났네요. 다시 입력하세요.&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}while(true); &lt;br /&gt;
 &lt;br /&gt;
 	room[ibug][jbug] = 1; // 바퀴벌레 초기값의 초기화&lt;br /&gt;
 	&lt;br /&gt;
 	// 바퀴벌레를 이동시키고 모두 이동하면 종료하는 while문&lt;br /&gt;
 	while(count&amp;amp;lt;50000 &amp;amp;amp;&amp;amp;amp; existZero == false){&lt;br /&gt;
 		&lt;br /&gt;
 		existZero = true;&lt;br /&gt;
 &lt;br /&gt;
 		for(i=0;i&amp;amp;lt;Xroom;i++){&lt;br /&gt;
 			for(j=0;j&amp;amp;lt;Yroom;j++){&lt;br /&gt;
 				if(room[i][j] == 0)&lt;br /&gt;
 					existZero = false;&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		int random = rand()%8;	// 0~7 까지의 임의의 수 생성해서 random 이란 integer 값에 대입&lt;br /&gt;
 		// 바퀴벌레가 범위를 벗어나지 않도록 해주는 함수&lt;br /&gt;
 		if (ibug + imove[random] &amp;amp;lt;0 || ibug + imove[random] &amp;amp;gt; Xroom-1 || &lt;br /&gt;
 			jbug + jmove[random] &amp;amp;lt;0 || jbug + jmove[random] &amp;amp;gt; Yroom-1)&lt;br /&gt;
 			continue;&lt;br /&gt;
 		// 바퀴벌레를 이동시키고 카운트를 하는 함수&lt;br /&gt;
 		else{&lt;br /&gt;
 			room[ibug+imove[random]][jbug+jmove[random]]++;&lt;br /&gt;
 			ibug = ibug + imove[random];&lt;br /&gt;
 			jbug = jbug + jmove[random];&lt;br /&gt;
 			count++;			&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		&lt;br /&gt;
 	}&lt;br /&gt;
 	//이동 횟수 출력&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;각 방에 이동한 횟수 : \n\n&amp;quot;;&lt;br /&gt;
 	for(i=0;i&amp;amp;lt;Xroom;i++){&lt;br /&gt;
 		for(j=0;j&amp;amp;lt;Yroom;j++)&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; setw(3) &amp;amp;lt;&amp;amp;lt; room[i][j];&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}&lt;br /&gt;
 	//총 이동횟수 출력&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;\n총 이동한 횟수 :&amp;quot; &amp;amp;lt;&amp;amp;lt; count &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
 	//메모리 해제&lt;br /&gt;
 	for (i=0; i&amp;amp;lt;Xroom;i++)&lt;br /&gt;
 		delete[] room[i];&lt;br /&gt;
 	delete [] room;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== 쓰레드 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 코딩시간&lt;br /&gt;
|-&lt;br /&gt;
| 대략2시간&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
초반에 알고리즘짜는데 어려움이 있었는데..&lt;br /&gt;
2차원동적배열은 처음 써본다ㅋ&lt;br /&gt;
오랜만에 C++ 로 코딩해보는듯...ㅋ 재미있었당&lt;br /&gt;
다른 레포트의 압박이 없어서 낮에 제정신에 짰으면 더 금방했을듯.. 지금시간 3시 정신이 몽롱하다.. ㅋ&lt;br /&gt;
&lt;br /&gt;
지금 코드를 보면 한번 움직일 때마다 모든 타일을 돌아다니면 0이 남아있는 지를 검사하는 시간낭비가 있구나. 이런 낭비를 없애기 위해 내가 1년전에 썼던 알고리즘을 하나 알려줄께. m*n의 공간에서 값이 0인 타일을 밟게되면 카운트를 +1해주면 카운트의 값이 m*n이 되면 그 공간의 모든 타일을 적어도 한번씩은 밟았다는 얘기가 되지. 한번 움직일 때마다 그 카운트 값을 검사하면 되겠지? 이해 안되면 나중에 물어보고. -[[강희경]]&lt;br /&gt;
&lt;br /&gt;
2차원 동적 배열할때 벡터를 사용해도 좋음. [[RandomWalk2/Vector로2차원동적배열만들기]] 자료구조 숙제는 [[STL]]을 사용하면 더 편하게 할수 있는거 같다. - [[상협]]&lt;br /&gt;
 편하기야 하겠지만 남발하는건 좋지 않음. 특히 자료구조 숙제같은 경우에는 :( - [[임인택]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[조동영]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>