2학년 1학기 ìž�료구조 ë ˆí�¬íŠ¸ìš© ¶
~cpp
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
void main(){
srand(time(0));
//ë°”í€´ë²Œë ˆë¥¼ 8방향으로 ì�´ë�™í•˜ê²Œ í• ë°°ì—´
int imove[] = {-1,0,1,1,1,0,-1,-1};
int jmove[] = {1,1,1,0,-1,-1,-1,0};
// 방� �기
int Xroom;
int Yroom;
// ë°”í€´ë²Œë ˆì�˜ 좌표값
int ibug;
int jbug;
int count = 0; // ì´�ì�´ë�™í•œ 횟수를 계산하게ë� integer ê°’
bool existZero = false; // ë°”í€´ë²Œë ˆê°€ 모ë‘� ë�Œì•„다녔는지 확ì�¸í• 때 ì“°ì�¼ bool형 ê°’
int i,j;
// ë°”í€´ë²Œë ˆê°€ ë�Œì•„다ë‹� ë°©ì�„ ìƒ�성
do{
cout << "ì§�사ê°�형ì�˜ 가로í�¬ê¸°ë¥¼ ìž…ë ¥í•´ì£¼ì„¸ìš”(2 < X <= 40) :";
cin >> Xroom;
cout << "ì§�사ê°�형ì�˜ 세로í�¬ê¸°ë¥¼ ìž…ë ¥í•´ì£¼ì„¸ìš”(2 <= Y < 20) :";
cin >> Yroom;
if (Xroom > 2 && Xroom < 41 && Yroom > 1 && Yroom < 21)
break;
cout << "세로, 가로ì�˜ í�¬ê¸°ì�˜ 범위를 벗어났네요. 다시 ìž…ë ¥í•˜ì„¸ìš”." << endl;
}while(true);
// 2중ë�™ì �ë°°ì—´ì�„ 만드는 함수
int **room;
room = new int*[Xroom];
for (i=0; i<Xroom; i++)
room[i] = new int[Yroom];
// ìƒ�성한 ë�™ì �ë°°ì—´ì�„ 초기화
for (i=0;i<Xroom;i++)
for(j=0;j<Yroom;j++)
room[i][j] =0;
// ë°”í€´ë²Œë ˆë¥¼ ìƒ�성하는 do ~ while 문
do{
cout << "ë°”í€´ë²Œë ˆì�˜ 초기값 X를 ìž…ë ¥í•´ì£¼ì„¸ìš” :";
cin >> ibug;
cout << "ë°”í€´ë²Œë ˆì�˜ 초기값 Y를 ìž…ë ¥í•´ì£¼ì„¸ìš” :";
cin >> jbug;
if (ibug >= 0 && ibug < Xroom && jbug >= 0 && jbug < Yroom)
break;
cout << "ë°”í€´ë²Œë ˆê°€ ë°©ì�˜ 범위를 벗어났네요. 다시 ìž…ë ¥í•˜ì„¸ìš”." << endl;
}while(true);
room[ibug][jbug] = 1; // ë°”í€´ë²Œë ˆ 초기값ì�˜ 초기화
// ë°”í€´ë²Œë ˆë¥¼ ì�´ë�™ì‹œí‚¤ê³ 모ë‘� ì�´ë�™í•˜ë©´ 종료하는 while문
while(count<50000 && existZero == false){
existZero = true;
for(i=0;i<Xroom;i++){
for(j=0;j<Yroom;j++){
if(room[i][j] == 0)
existZero = false;
}
}
int random = rand()%8; // 0~7 까지� 임�� 수 �성해서 random �란 integer 값� 대입
// ë°”í€´ë²Œë ˆê°€ 범위를 벗어나지 않ë�„ë¡� 해주는 함수
if (ibug + imove[random] <0 || ibug + imove[random] > Xroom-1 ||
jbug + jmove[random] <0 || jbug + jmove[random] > Yroom-1)
continue;
// ë°”í€´ë²Œë ˆë¥¼ ì�´ë�™ì‹œí‚¤ê³ 카운트를 하는 함수
else{
room[ibug+imove[random]][jbug+jmove[random]]++;
ibug = ibug + imove[random];
jbug = jbug + jmove[random];
count++;
}
}
//ì�´ë�™ 횟수 ì¶œë ¥
cout << "� 방� ��한 횟수 : \n\n";
for(i=0;i<Xroom;i++){
for(j=0;j<Yroom;j++)
cout << setw(3) << room[i][j];
cout << endl;
}
//ì´� ì�´ë�™íšŸìˆ˜ ì¶œë ¥
cout << "\n� ��한 횟수 :" << count << endl;
//메모리 í•´ì œ
for (i=0; i<Xroom;i++)
delete[] room[i];
delete [] room;
}
ì“°ë ˆë“œ ¶
| 코딩시간 |
| 대략2시간 |
초반ì—� ì•Œê³ ë¦¬ì¦˜ì§œëŠ”ë�° ì–´ë ¤ì›€ì�´ 있었는ë�°..
2ì°¨ì›�ë�™ì �ë°°ì—´ì�€ 처ì�Œ ì�¨ë³¸ë‹¤ã…‹
오랜만� C++ 로 코딩해보는듯...ㅋ 재미있었당
다른 ë ˆí�¬íЏì�˜ ì••ë°•ì�´ 없어서 ë‚®ì—� ì œì •ì‹ ì—� 짰으면 ë�” 금방했ì�„듯.. 지금시간 3시 ì •ì‹ ì�´ 몽롱하다.. ã…‹
지금 코드를 ë³´ë©´ 한번 움ì§�ì�¼ 때마다 ëª¨ë“ íƒ€ì�¼ì�„ ë�Œì•„다니면 0ì�´ 남아있는 지를 검사하는 시간ë‚비가 있구나. ì�´ëŸ° ë‚비를 ì—†ì• ê¸° 위해 ë‚´ê°€ 1ë…„ì „ì—� ì�¼ë�˜ ì•Œê³ ë¦¬ì¦˜ì�„ 하나 ì•Œë ¤ì¤„ê»˜. m*nì�˜ 공간ì—�서 ê°’ì�´ 0ì�¸ 타ì�¼ì�„ 밟게ë�˜ë©´ 카운트를 +1해주면 카운트ì�˜ ê°’ì�´ m*nì�´ ë�˜ë©´ ê·¸ 공간ì�˜ ëª¨ë“ íƒ€ì�¼ì�„ ì �ì–´ë�„ 한번씩ì�€ 밟았다는 얘기가 ë�˜ì§€. 한번 움ì§�ì�¼ 때마다 ê·¸ 카운트 ê°’ì�„ 검사하면 ë�˜ê² ì§€? ì�´í•´ 안ë�˜ë©´ 나중ì—� ë¬¼ì–´ë³´ê³ . -ê°•í�¬ê²½
2ì°¨ì›� ë�™ì � ë°°ì—´í• ë•Œ 벡터를 사용해ë�„ 좋ì�Œ. RandomWalk2/Vector로2ì°¨ì›�ë�™ì �배열만들기 ìž�료구조 ìˆ™ì œëŠ” STLì�„ 사용하면 ë�” 편하게 í• ìˆ˜ 있는거 같다. - ìƒ�협
편하기야 í•˜ê² ì§€ë§Œ 남발하는건 좋지 않ì�Œ. 특히 ìž�료구조 ìˆ™ì œê°™ì�€ 경우ì—�는
- 임��
- 임��









