= [RandomWalk]/[ì¡°ë™ì˜] = === 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]ì„ ì‚¬ìš©í•˜ë©´ ë” íŽ¸í•˜ê²Œ í• ìˆ˜ 있는거 같다. - [ìƒí˜‘] 편하기야 í•˜ê² ì§€ë§Œ 남발하는건 좋지 ì•ŠìŒ. 특히 ìžë£Œêµ¬ì¡° ìˆ™ì œê°™ì€ ê²½ìš°ì—는 :( - [ìž„ì¸íƒ] ---- [ì¡°ë™ì˜]