aka {{{ScheduledWalk}}} * aka = also known as ë°”í€´ë²Œë ˆ í•œ 마리가 íŒ ìœ„ë¥¼ ëŒì•„다닌다. ì´ ë°”í€´ë²Œë ˆê°€ ê° ì¹¸ì„ ë°©ë¬¸í•œ 횟수와 ì´ ì›€ì§ì¸ 횟수를 구하ë¼. ---- ì´ íŽ˜ì´ì§€ì— 있는 활ë™ë“¤ì€ 프로그래ë°ê³¼ ë””ìžì¸ì— 대해 ìƒê°í•´ ë³¼ 수 있는 êµìœ¡ 프로그램ì´ë‹¤. ëª¨ë“ í™œë™ì„ ë내기까지 ì‚¬ëžŒì— ë”°ë¼ í•˜ë£¨ì—ì„œ 삼사ì¼ì´ 걸릴 ìˆ˜ë„ ìžˆë‹¤. 하지만 여기서 얻는 ì´ë“ì€ ì•žìœ¼ë¡œ 몇 ë…„ë„ ë„˜ê²Œ 지ì†ë 것ì´ë‹¤. ë¬¸ì œë¥¼ í’€ 때는 혼ìžì„œ 하거나, 그게 ì–´ë µë‹¤ë©´ 둘ì´ì„œ PairProgrammingì„ í•´ë„ ì¢‹ë‹¤. see also: * ìœ ì‚¬ë¬¸ì œ RandomWalk * ObjectOrientedProgrammingì—ì„œ ì´ ë¬¸ì œë¥¼ ì²˜ìŒ ì†Œê°œí–ˆë‹¤. * 테스트 ì¼€ì´ìŠ¤ë“¤ * ["RandomWalk2/TestCase"] * ["RandomWalk2/TestCase2"] * 뼈대예시 ["RandomWalk2/ClassPrototype"] (OOP를 ì²˜ìŒ ë‹¤ë£¨ëŠ” 경우가 아니ë¼ë©´ 보지 않기를 권한다) ---- === ìž…ë ¥ === í‘œì¤€ìž…ë ¥ì„ í†µí•´ ë‹¤ìŒ ë‚´ìš©ì„ ìž…ë ¥ 받는다. {{{ M N (0~(M-1)) (0~(N-1)) ([0~7]*) 999 }}} 첫 ì¤„ì˜ M,Nì€ íŒì˜ 행과 ì—´ë¡œ íŒì˜ í¬ê¸°ë¥¼ ë§í•˜ê³ , ë‹¤ìŒ ë¼ì¸ì˜ ìˆ«ìž ë‘ ê°œëŠ” ë°”í€´ì˜ ì´ˆê¸° 위치로 행과 ì—´ì˜ ìˆœì„œë‹¤. ë‹¤ìŒ ì¤„ì—는 ë°”í€´ì˜ ì—¬ì •ì´ ë‚˜ì˜¤ëŠ”ë° 0부터 7 사ì´ì˜ 숫ìžê°€ ì´ì–´ì§„다. 0부터 7 사ì´ì˜ 숫ìžëŠ” ë°©í–¥ì„ ì˜ë¯¸í•œë‹¤. 0ì´ ë¶ìª½ì´ê³ , 시계방향으로 1,2,3,...7ì´ ë°°ì¹˜ëœë‹¤. 마지막 ì¤„ì€ 999ë¡œ ë난다. 예. {{{ 10 10 0 0 22222444445 999 }}} 10í–‰ 10ì—´ì˜ íŒì˜ 0í–‰ 0ì—´ 지ì ì—ì„œ 바퀴가 ì¶œë°œí•˜ê³ , ì²˜ìŒ ë‹¤ì„¯ ì¹¸ì„ ë™ìª½ìœ¼ë¡œ 움ì§ì¸ 다ìŒ, 다섯 ì¹¸ì„ ë‚¨ìª½ìœ¼ë¡œ 움ì§ì´ê³ , ë§ˆì§€ë§‰ì— ë‚¨ì„œìª½ìœ¼ë¡œ í•œ 칸 움ì§ì¸ ë‹¤ìŒ ë난다. === 종료 ì¡°ê±´ === * íŒ ìœ„ì˜ ëª¨ë“ ì¹¸(cell)ì„ í•œë²ˆ ì´ìƒ 방문했거나 * ë°”í€´ë²Œë ˆì˜ ì—¬ì •ì´ ë나거나 === 진행 === 바퀴는 ì—¬ì •ì— ë”°ë¼ í•œ ë²ˆì— í•œ 칸 씩 움ì§ì´ë˜ ì´ 8 ë°©í–¥ 중 하나로 움ì§ì¼ 수 있다. 만약 íŒì˜ ëì„ ë„˜ì–´ì„œë©´ 반대쪽으로 ëŒì•„ 나오게 ëœë‹¤. 만약 ì—´ì´ N-1ì¼ ë•Œ ë™ìª½ìœ¼ë¡œ 움ì§ì´ë©´ ê°™ì€ í–‰ì˜ 0ì—´ë¡œ ì´ë™í•˜ê³ , ì—´ì´ 0ì¼ ë•Œ 서쪽으로 ì´ë™í•˜ë©´ ë™ì¼ í–‰ì˜ N-1ì—´ë¡œ 나온다. 만약 í–‰ì´ M-1ì¼ ë•Œ 남쪽으로 움ì§ì´ë©´ ê°™ì€ ì—´ì˜ 0행으로 ë‚˜ì˜¤ê³ , í–‰ì´ 0ì¼ ë•Œ ë¶ìª½ìœ¼ë¡œ ì´ë™í•˜ë©´ ë™ì¼ ì—´ì˜ M-1행으로 나온다. ë”°ë¼ì„œ, 위치가 0í–‰ 0ì—´ì¼ ë•Œ ë¶ì„œìª½ìœ¼ë¡œ 움ì§ì´ë©´ M-1í–‰ N-1ì—´ë¡œ 나오게 ëœë‹¤. === ì¶œë ¥ === 표준 ì¶œë ¥ì„ í†µí•´, 바퀴가 ì´ ì›€ì§ì¸ 횟수와 ê° ì¹¸ì— ë„달한 횟수를 ì¶œë ¥í•œë‹¤. ì–‘ì‹ì€ 다ìŒê³¼ 같다. {{{ (ì´ íšŸìˆ˜) (n0,0) (n0,1) (n0,2) ... (n0,N-1) (n1,0) (n1,1) (n1,2) ... (n1,N-1) ... (nM-1,0) ... (nM-1,N-1) }}} 첫 번 째 ì¤„ì€ ë°”í€´ê°€ ì´ ì›€ì§ì¸ 횟수(ì²˜ìŒ ë°”í€´ê°€ 놓ì´ëŠ” ê²ƒì€ ì›€ì§ì¸ 것으로 치지 않는다)ì´ê³ í•œ ì¤„ì€ ëˆ ë‹¤ìŒ, íŒì˜ ê° ì¹¸ì— ë°”í€´ê°€ 방문한 횟수를 í–‰ë ¬ë¡œ ì¶œë ¥í•˜ë˜, ë™ì¼ í–‰ì˜ ì¹¸ì€ ë¹ˆì¹¸(스페ì´ìŠ¤)ë¡œ êµ¬ë¶„í•˜ê³ , ê° í–‰ì€ í•˜ë‚˜ì˜ ì¤„ì„ ì°¨ì§€í•œë‹¤. 예. {{{ 11 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }}} ---- === Source === ||í•´ê²°ìž ||개발시간 ||사용언어||Source || ||ì´ìƒê·œ || . ||C++ ||["RandomWalk2/ìƒê·œ"]|| ||조현민 || . ||C++ ||["RandomWalk2/현민"]|| ||ì¸ìˆ˜ || . ||C++ ||["RandomWalk2/Insu"] || ||ì˜ë™ || . ||C ||["RandomWalk2/ì˜ë™"] || ||ìƒê·œ, ì°½ì„|| . ||C++||["ScheduledWalk/ì°½ì„&ìƒê·œ"]|| ||재니, ì˜ë™|| . ||C++||["ScheduledWalk/재니&ì˜ë™"] || ||. || . ||C ||["RandomWalk2/Vectorë¡œ2ì°¨ì›ë™ì 배열만들기"] || ||ì„천 || . ||C++ ||["ScheduledWalk/ì„천"] || ||ì‹ ìž¬ë™|| . ||Python||["RandomWalk2/재ë™"]|| ||ìƒê·œ, ì‹ ìž¬ë™||2시간||Python||["RandomWalk2/ExtremePair"]|| ||[조현태] || ||C++ ||[RandomWalk2/조현태] || ---- 다ìŒì€ ì´ìƒì˜ ìš”êµ¬ì¡°ê±´ì„ ë§Œì¡±í•˜ëŠ” 프로그램 ê°œë°œì´ ì™„ë£Œë˜ì—ˆì„ 경우만 본다. . . . . . . . . . . . . . . . . . . . ëŒ€ë¶€ë¶„ì˜ í”„ë¡œê·¸ëž˜ë° ë¬¸ì œë‚˜, 경시대회 ë¬¸ì œëŠ” 한번 주어진 ë¬¸ì œì— í•œë²ˆ 대ì‘하면 그걸로 ë난다. 하지만 í˜„ì‹¤ì€ ê·¸ë ‡ì§€ 못하다. 한번 개발한 í”„ë¡œê·¸ëž¨ì„ ìš”êµ¬ì‚¬í• ì¶”ê°€/ë³€ê²½ì— ë”°ë¼ ëª‡ 번ì´ê³ ìˆ˜ì •í•˜ê³ ë‹¤ì‹œ 개발해야 í• ë•Œë„ ìžˆë‹¤. 우리가 ë§í•˜ëŠ” ë¬¸ì œí’€ì´ ëŠ¥ë ¥ì—는 ì´ë¯¸ ë§Œë“ í”„ë¡œê·¸ëž¨ì„ ìœ ì§€ë³´ìˆ˜í•˜ëŠ” ìž‘ì—…ë„ í¬í•¨ë˜ì–´ì•¼ 한다. êµìœ¡ì— 있어 ì´ëŸ° ìž‘ì—…ì´ ì¤‘ìš”í•œ ì´ìœ 중 하나는, ìžì‹ ì´ ë§Œë“ í”„ë¡œê·¸ëž¨ì´ í•´ë‹µì„ ì œëŒ€ë¡œ ë‚´ëŠëƒëŠ” ê²ƒì„ í™•ì¸í•˜ëŠ” ë°ì—는 í•œ ë¬¸ì œë¥¼ 한번 푸는 것으로 족하지만, 거기서 ì½”ë“œì˜ ë””ìžì¸ ì§ˆì„ í™•ì¸í• 수가 없다는 ë¬¸ì œê°€ 있기 때문ì´ë‹¤. 하지만, ìš”êµ¬ì‚¬í• ë³€ê²½ì— ë”°ë¼ ìžì‹ ì´ ê°œë°œí•œ í”„ë¡œê·¸ëž¨ì„ ë‹¤ì‹œ ìˆ˜ì •í•˜ê²Œ ë˜ë©´, ì´ì „ì— ë§Œë“ ì½”ë“œì˜ ì§ˆì— ë”°ë¼ ê·¸ ë…¸ë ¥ì— í˜„ê²©í•œ ì°¨ì´ê°€ 난다. ë””ìžì¸ ì§ˆì´ ë†’ìœ¼ë©´ 아주 ì§§ì€ ì‹œê°„ ì•ˆì— ê°„ë‹¨í•˜ê²Œ ìš”êµ¬ì‚¬í• ë³€í™”ì— ëŒ€ì‘í• ìˆ˜ ìžˆì„ ê²ƒì´ê³ , ì§ˆì´ ë‚®ì•˜ë‹¤ë©´ ìž¥ê¸°ê°„ì— ê±¸ì³ ì—¬ê¸°ì €ê¸°ë¥¼ ë“¤ì‘¤ì‹œê³ ê³¨ì¹˜ë¥¼ ì©í˜€ì•¼ í• ê²ƒì´ë‹¤. ì´ëŸ° ê²½í—˜ì„ í•˜ê²Œ ë˜ë©´ "ë””ìžì¸ì˜ 질"ì´ ë¬´ì—‡ì¸ê°€ ì§ì ‘ 체험하게 ë˜ê³ , ê·¸ê²ƒì— ëŒ€í•´ ìƒê°í•´ 보게 ë˜ë©°, 실패/ê°œì„ ì„ í†µí•´ ì ì°¨ ë””ìžì¸ ì‹¤ë ¥ì„ ë†’ì¼ ìˆ˜ 있다. ë”ê°€ 잘하기 위해서는, "ì´ëŸ° ê²ƒì´ ìžˆê³ , ë‚œ ê·¸ê²ƒì„ ìž˜ 못하는구나"하는 "ë¬´ì§€ì˜ ì¸ì‹"ì´ ì„ í–‰ë˜ì–´ì•¼ 한다. (see also Wiki:FourLevelsOfCompetence ) 다ìŒì€ 코드 ë””ìžì¸ì´ 좋지 ëª»í–ˆì„ ê²½ìš° ê³ ìƒì„ í• ìš”êµ¬ì‚¬í• ë³€ê²½ë“¤ì´ë‹¤. 그냥 대충 ìƒê°ë‚˜ëŠ” 대로 아무것ì´ë‚˜ 나열한 게 ì•„ë‹ˆê³ , 순서나 변경사í•ì´ë‚˜ ëª¨ë‘ ì² ì €í•˜ê²Œ êµìœ¡ì 효과를 ì—¼ë‘ì— ë‘ê³ "ë””ìžì¸"ë˜ì—ˆë‹¤. 변경사í•ì€ 순서대로 "누ì ì "ì´ë‹¤. 변경1ì„ ë³¼ 때는 변경2를 보지 않는다. í˜„ìž¬ì˜ ë³€ê²½ì„ ëª¨ë‘ ì™„ë£Œí•œ 후ì—야 ë‹¤ìŒ ë³€ê²½ì„ ë³¼ 수 있다. ë”°ë¼ì„œ 변경3ì„ í•˜ê³ ìžˆë‹¤ë©´, ì‚¬ì‹¤ìƒ í˜„ìž¬ì˜ ì½”ë“œëŠ” {{{~cpp 기본 요구사í•+변경1+변경2}}}를 ì´ë¯¸ ì¶©ì¡±í•˜ê³ ìžˆì–´ì•¼ 한다. 만약 ìžì‹ ì´ ìž‘ì„±í•œ 코드를 ìœ„í‚¤ì— ì˜¬ë¦¬ê³ ì‹¶ë‹¤ë©´ {{{~cpp RandomWalk2/아무개}}} íŒ¨í„´ì˜ íŽ˜ì´ì§€ ì´ë¦„ì„ ë§Œë“¤ê³ ê±°ê¸°ì— ì½”ë“œë¥¼ 넣으면 ëœë‹¤. ì´ ë•Œ, 변경사í•ì„ 하나씩 ì™„ë£Œí•¨ì— ë”°ë¼, ì½”ë“œì˜ ì–´ë””ë¥¼ 어떻게 바꿨는지(예컨대, 새로 í´ëž˜ìŠ¤ë¥¼ 하나 만들어 붙ì´ê³ , 기존 í´ëž˜ìŠ¤ì—ì„œ ì–´ë–¤ ë©”ì˜ë“œë¥¼ ëŒì–´ì˜¨ ë’¤ì— ë‹¤ë¥¸ í´ëž˜ìŠ¤ê°€ 새 í´ëž˜ìŠ¤ë¥¼ ìƒì†í•˜ê²Œ í–ˆë‹¤ë“ ì§€ 등) ê·¸ 변천 ê³¼ì •ê³¼ ìžì‹ ì˜ ì‚¬ê³ ê³¼ì •ì„ ìš”ì•½í•´ì„œ 함께 ì 어주면 ìžì‹ ì€ ë¬¼ë¡ ë‚¨ì—ê²Œë„ ë§Žì€ ë„ì›€ì´ ë 것ì´ë‹¤. ë˜í•œ, 변경사í•ì„ 하나 완료하는 ë° ê±¸ë¦° ì‹œê°„ì„ í•¨ê»˜ 리í¬íŒ…하면 한가지 ì²™ë„ê°€ ë 수 ìžˆê² ë‹¤. === 변경1 === '''바퀴 커플''' ë°”í€´ë²Œë ˆì˜ ë§ˆë¦¬ìˆ˜ê°€ ë‘마리로 늘어난다. ê·¸ë¦¬ê³ "í„´"(turn)ì˜ ê°œë…ì´ ìƒê¸´ë‹¤. í„´ì€ ì¼ì¢…ì˜ ë‹¨ìœ„ì‹œê°„ìœ¼ë¡œ, í•œë²ˆì˜ í„´ì— ë‘ ë§ˆë¦¬ì˜ ë°”í€´ë²Œë ˆëŠ” ê°ê° ìžì‹ ì´ ì˜ˆì •í•œ 방향으로 ì´ë™ì„ 한다. ìž…ë ¥ìžë£ŒëŠ” 다ìŒê³¼ ê°™ì´ ë°”ë€Œì–´ì•¼ 한다. {{{~cpp 10 10 0 0 22222444445 3 7 121212645372 999 }}} 첫번째 바퀴는 0í–‰0ì—´ì—ì„œ 22222444445ì˜ ì—¬ì •ìœ¼ë¡œ ì—¬í–‰í•˜ê³ , ë‘번째 바퀴는 í–‰7ì—´ì—ì„œ 121212645372ì˜ ì—¬ì •ì„ ë”°ë¥¸ë‹¤. (ë‘ ë°”í€´ì˜ ì‹œìž‘ì ì´ ê°™ì„ ìˆ˜ë„ ìžˆë‹¤) ì²˜ìŒ í„´ì— 1번 바퀴는 2방향으로 한칸 움ì§ì´ê³ , 2번 바퀴는 1방향으로 한칸 움ì§ì¸ë‹¤. 둘 중 한쪽 ë°”í€´ì˜ ì—¬ì •ì´ ëë‚˜ë„ ë‹¤ë¥¸ í•˜ë‚˜ì˜ ë°”í€´ ì—¬ì •ì´ ë나지 않으면 ê²Œìž„ì€ ì¢…ë£Œí•˜ì§€ 않는다. 하지만, ë‘ ë°”í€´ 중 ì–´ëŠ ëˆ„êµ¬ì˜ ì—¬ì •ë„ ë나지 않았ë”ë¼ë„ íŒ ìœ„ì˜ ì…€ì´ ëª¨ë‘ ë°©ë¬¸ë˜ì—ˆë‹¤ë©´(즉, 1ì´ ë°©ë¬¸í•œ 셀과 2ê°€ 방문한 ì…€ì˜ í•©ì§‘í•©ì´ ì „ì²´ ì…€ì´ë¼ë©´) ê²Œìž„ì€ ì¢…ë£Œí•œë‹¤. ì¶œë ¥ì •ë³´ëŠ” ê° ë°”í€´ë³„ 움ì§ì¸ 수와 íŒì˜ ìƒíƒœê°€ ëœë‹¤. {{{~cpp (바퀴1) (바퀴2) (íŒì˜ ìƒíƒœ) }}} . . . . . . . . . . . . . . . . . . . === 변경2 === '''N-바퀴''' 바퀴는 ì´ N마리(Nì€ 100 ì´í•˜ì˜ ìžì—°ìˆ˜)ê°€ 존재 가능하다. ë°©ì‹ì€ 위 '''바퀴 커플'''ê³¼ ìœ ì‚¬í•˜ë‹¤. {{{~cpp 10 10 0 0 22222444445 3 7 121212645372 2 5 57575757575757575757 8 8 663 999 }}} ì´ ê²½ìš° ì´ ë„¤ë§ˆë¦¬ì˜ ë°”í€´ê°€ íŒ ìœ„ë¥¼ ëŒì•„다니게 ëœë‹¤. ì¶œë ¥ì •ë³´ëŠ” 다ìŒê³¼ 같다. {{{~cpp (바퀴1) (바퀴2) ... (바퀴N) (íŒì˜ ìƒíƒœ) }}} . . . . . . . . . . . . . . . . . . . === 변경3 === '''슈í¼ë°”퀴''' ë°”í€´ì— ë‘가지 종류가 있다. {{{~cpp SuperRoach}}}와 {{{~cpp NormalRoach}}}ê°€ 그것ì´ë‹¤. {{{~cpp NormalRoach}}}는 í•œë²ˆì— í•œì¹¸,{{{~cpp SuperRoach}}}는 í•œë²ˆì— ë‘ì¹¸ì„ ì“¸ê³ ì§€ë‚˜ê°„ë‹¤. ìž…ë ¥ìžë£ŒëŠ” 다ìŒê³¼ 같다. {{{~cpp 10 10 0 0 S 22222444445 3 7 N 121212645372 2 5 N 57575757575757575757 8 8 S 663 999 }}} 첫번째 바퀴는 슈í¼ë°”퀴로 0í–‰0ì—´ì—ì„œ 시작해서 22222444445ì˜ ì—¬ì •ëŒ€ë¡œ 여행한다. ë‘번째 바퀴는 ì •ìƒë°”퀴로 3í–‰7ì—´ì—ì„œ ì—¬í–‰ì„ ì‹œìž‘í•œë‹¤. ì–´ë–¤ 슈í¼ë°”퀴가 0í–‰0ì—´ì—ì„œ ì¶œë°œí•˜ê³ ì—¬ì •ì´ 224였다면 ê·¸ 바퀴가 지나간 íŒì˜ ìƒíƒœëŠ” 다ìŒê³¼ 같다. {{{~cpp 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... }}} ì¶œë ¥ì •ë³´ëŠ” 바퀴별 움ì§ì¸ 횟수(슈í¼ë°”í€´ì˜ ê²½ìš° í•œë²ˆì— ë‘ì¹¸ì„ ì›€ì§ì´ê¸°ì— 움ì§ì¸ 횟수 ì—ì‹œ ë‘번으로 친다)와 íŒì˜ ìƒíƒœë‹¤. ì•žì„œì˜ ê²½ìš°ì™€ ë™ì¼í•˜ë‹¤. . . . . . . . . . . . . . . . . . . . === 변경4 === '''쉬기''','''ìŒì‹''' ì´ë²ˆì—는 ë‘ê°€ì§€ì˜ ìš”êµ¬ì‚¬í• ë³€ê²½ì´ ìžˆë‹¤. 바퀴는 ì—¬ì •ì—ì„œ 9ê°€ 나오면 ì œìžë¦¬ì—ì„œ í•œ í„´ì„ ì‰´ 수 있다. ë”°ë¼ì„œ í•œ í„´ì— ì›€ì§ì´ëŠ” 바퀴는 ì „ì²´ ë°”í€´ì˜ ìˆ˜ N보다 같거나 작다. íŒ ìœ„ì—는 ìŒì‹ì´ 몇 êµ°ë° ë–¨ì–´ì ¸ ìžˆì„ ìˆ˜ 있다. ì •ìƒë°”퀴가 ì´ ìŒì‹ì„ 먹으면 ë‹¤ìŒ ë”°ë¼ì˜¤ëŠ” ì¼ì •ê¸°ê°„(5í„´) ë™ì•ˆ ì¼ì‹œì 슈í¼ë°”퀴가 ëœë‹¤. 태ìƒì 슈í¼ë°”í€´ë„ ìŒì‹ì„ 먹기는 하지만 ìžì‹ ì—게는 아무 ì˜í–¥ì´ 없다. 바퀴가 ìŒì‹ì„ 먹으면 ê·¸ ì…€ì˜ ìŒì‹ 개수가 하나 ì¤„ì–´ë“ ë‹¤. í•œ ì…€ì— ì—¬ëŸ¬ê°œì˜ ìŒì‹ì´ ìžˆì„ ìˆ˜ 있다. ì •ìƒë°”퀴가 슈í¼ë°”퀴가 ëœ ë™ì•ˆì— 다시 ìŒì‹ì„ 먹으면 "ìž„ì‹œ 슈í¼ë°”퀴"ì˜ ê¸°ê°„ì´ í˜„ ì‹œì ì—ì„œ 5턴만í¼ìœ¼ë¡œ ìž¬ì„¤ì •ëœë‹¤. 예컨대, ì²˜ìŒ ìŒì‹ì„ ë¨¹ê³ ìŠˆí¼ë°”퀴가 ëœ ìƒíƒœì—ì„œ 2í„´ì´ ì§€ë‚œ 다ìŒì— 다시 ìŒì‹ì„ 먹으면 앞으로 5í„´ ë™ì•ˆ 슈í¼ë°”퀴가 ëœë‹¤. í•œ í„´ì— ë‘˜ ì´ìƒì˜ 바퀴가 ë™ì‹œì— ìŒì‹ì´ 있는 ì¹¸ì— ë„ì°©í–ˆì„ ë•Œ, ë°”í€´ì˜ ìˆ˜ê°€ ìŒì‹ì˜ 수보다 많다면 ë°”í€´ë“¤ì€ ë‹¤ìŒ ìˆœì„œë¡œ ìŒì‹ì„ 먹는다. 1. ì •ìƒë°”퀴 1. ì¼ì‹œì 슈í¼ë°”퀴 1. 태ìƒì 슈í¼ë°”퀴 1. 만약 ìš°ì„ ìˆœìœ„ê°€ ê°™ì€ ë°”í€´ê°€ ìŒì‹ì„ ë†“ê³ ê²½ìŸí•œë‹¤ë©´ ì²˜ìŒ ìž…ë ¥í–ˆë˜ ìˆœì„œê°€ 2ì°¨ ìš°ì„ ìˆœìœ„ê°€ ëœë‹¤. ìž…ë ¥ìžë£ŒëŠ” 다ìŒê³¼ 같다. {{{~cpp 10 10 2 6 3 9 4 8 4 7 -1 0 0 S 22222449944945 3 7 N 999121212645372 2 5 N 57597575757597597575757 8 8 S 663999 999 }}} íŒì˜ í¬ê¸°ëŠ” ì´ 10í–‰10ì—´ì´ê³ , 2í–‰6ì—´, 3í–‰9ì—´, 4í–‰8ì—´, 4í–‰7ì—´ì— ìŒì‹ì´ 미리 비치ë˜ì–´ 있다(ì´ ë•Œ 행과 ì—´ì€ ì•žì„œì™€ 마찬가지로 ê°ê° 0부터 시작). -1ì€ ìŒì‹ì •ë³´ì˜ ëì„ ì˜ë¯¸í•œë‹¤. ì¶œë ¥ì •ë³´ëŠ” 앞서와 ìœ ì‚¬í•˜ë‹¤. í•œë²ˆì— ë‘ì¹¸ì„ ì›€ì§ì´ë©´ 움ì§ì¸ íšŸìˆ˜ë„ ë‘번ì´ê³ , 한번 쉴 ë•Œì—는 움ì§ì¸ 횟수가 ì¦ê°€í•˜ì§€ 않는다. (ê³ ë¡œ, ê²°êµ "움ì§ì¸ 횟수"는 움ì§ì¸ 거리와 ë¹„ìŠ·í•˜ë‹¤ê³ ë³´ë©´ ëœë‹¤) íŒì˜ ì •ë³´ëŠ” ì˜ˆì „ê³¼ ë™ì¼í•œ ì–‘ì‹ìœ¼ë¡œ ì¶œë ¥í•œë‹¤. . . . . . . . . . . . . . . . . . . . ëª¨ë“ ìš”êµ¬ì‚¬í• ë³€ê²½ì´ ë났다. 히딩í¬ì²˜ëŸ¼ "ì—¬ì „ížˆ ë°°ê°€ ê³ í”„ë‹¤"ë©´, ì´ ê²Œìž„ì„ ì‚¼ì°¨ì›(íë¹…)으로 확장하는 ê²ƒì„ ê³ ë ¤í•´ ë³´ë¼. ìž…ë ¥/ì¶œë ¥ìžë£Œì˜ 스펙 ë“±ì€ ëª¨ë‘ ìžì‹ ì´ íŒë‹¨í•´ì„œ ì§ì ‘ ì •ì˜í•˜ë¼. ì–´ì°Œ ë˜ì—ˆê±´ 여기까지 ë„달한 ê²ƒì„ ì§„ì‹¬ìœ¼ë¡œ 축하한다. ëŒ€ë¶€ë¶„ì˜ í•™ìŠµìžëŠ” ì¼ë‹¨ ë¬¸ì œì˜ ë‹µì— ë„달하면 ê·¸ ê²½í—˜ì„ ì™„ì „ížˆ ë§ê°í•´ 버리는 ë‚˜ìœ ìŠµê´€ì´ ìžˆë‹¤ -- ì´ëŸ° ì‚¬ëžŒë“¤ì€ ë¬¸ì œë¥¼ 풀긴 풀었으ë˜, ë‹¤ìŒ ë²ˆì— ìœ ì‚¬ ë¬¸ì œë¥¼ ì ‘í•˜ë©´ ì—¬ì „ížˆ ê·¸ ë¬¸ì œë¥¼ ì²˜ìŒ ì ‘í–ˆì„ ë•Œë¥¼ 답습하는 ì œìžë¦¬ 걸ìŒì„ 하기 쉽다. ìžì‹ ì˜ ê²½í—˜ì„ ë°˜ì¶”í•´ 보는 ê²ƒì€ íš¨ê³¼ì ì¸ í•™ìŠµì— ìžˆì–´ 필수ì ì¸ ìš”ì†Œë‹¤. ë‹¤ìŒ í™œë™ì„ ê¼ í•´ë³´ê¸¸ 권한다. ì—„ì²ë‚˜ê²Œ ë§Žì€ ê²ƒì„ ë°°ìš°ê²Œ ë 것ì´ë‹¤. === 남 관찰/분ì„하기 === 다른 ì‚¬ëžŒì˜ ì½”ë“œì™€ ê·¸ 코드가 나온 ê³¼ì •ì„ ''가능하다면'' êµ¬ê²½í•˜ê³ ë¶„ì„하ë¼. ìžì‹ ê³¼ì˜ ì°¨ì´ì ê³¼ ìœ ì‚¬ì ì€ ë¬´ì—‡ì¸ê°€? ê° ìš”êµ¬ì‚¬í• ë³€ê²½ì— ë‹¤ë¥¸ ì‚¬ëžŒì€ ì–´ë–¤ ì‹ìœ¼ë¡œ 대ì‘했는가? ìžì‹ ì´ ì‚¬ìš©í•œ 방법과 비êµí•´ ë³´ë¼. ëˆ„êµ¬ì˜ ê²ƒì´ ë” ë‚«ë‹¤ê³ ìƒê°í•˜ëŠ”ê°€? 몇 몇 ì‚¬ëžŒë“¤ì´ ê³µí†µì 으로 사용하는 "ì¢‹ì€ ì ‘ê·¼ë²•"ê³¼ "ë‚˜ìœ ì ‘ê·¼ë²•"ì´ ìžˆëŠ”ê°€? ë‚´ 프로그램ì„, ë˜ ê·¸ ì§„í™”ì˜ ê³¼ì •ì„ ë‚¨ì—게 ë³´ì—¬ì£¼ê³ ì˜ê²¬ì„ 들어보ë¼. === 새로하기 === ìµœì´ˆì˜ ìš”êµ¬ì‚¬í• ì œì‹œ ì´í›„ì— ë‚˜ì˜¨ 변경사í•ë“¤ì´ ë”°ë¼ì˜¤ì§€ ì•Šì„ ê²ƒì´ë¼ ê°€ì •í•˜ê³ , 만약 ì´ RandomWalk2 ë¬¸ì œë¥¼ 다시 ì ‘í–ˆë‹¤ë©´ 어떻게 ì ‘ê·¼í•˜ê² ëŠ”ê°€. ì–´ë–¤ ê³¼ì •ì„ ê±°ì³ì„œ ì–´ë–¤ í”„ë¡œê·¸ëž¨ì„ ê°œë°œí•˜ê² ëŠ”ê°€? ìµœì´ˆì˜ ìš”êµ¬ì‚¬í•ì„ "새로 ì ‘í–ˆë‹¤"ê³ ê°€ì •í•˜ê³ , ê·¸ë¦¬ê³ ê¸°ì¡´ì— ì–»ì—ˆë˜ "통찰"ë§Œì„ ê°„ì§í•œ 채, (최초 요구사í•ì— 대해서만) ì´ ë¬¸ì œë¥¼ 다시 한번 풀어보ë¼. (ì°¨í›„ì˜ ìš”êµ¬ì‚¬í• ë³€ê²½ì— ëŒ€í•œ ê³ ë ¤ëŠ” 하지 ë§ë¼.) 다른 í”„ë¡œê·¸ëž¨ì´ ë‚˜ì˜¤ëŠ”ê°€? ì‹œê°„ì€ ì–¼ë§ˆë‚˜ ëœ/ë” ê±¸ë¦¬ëŠ”ê°€? ë””ìžì¸ì€ 어떻게 달ë¼ì¡ŒëŠ”ê°€? ì´ì™€ 비슷한 ë¬¸ì œë¥¼ 혹시 ê³¼ê±°ì— ì ‘í•´ë³´ì•˜ëŠ”ê°€? ê·¸ ë¬¸ì œë¥¼ ì´ì œëŠ” 좀 다르게 풀것 같지 ì•Šì€ê°€? ê·¸ ë¬¸ì œì™€ RandomWalk2 경험ì—ì„œ ì–´ë–¤ 공통ì /ì°¨ì´ì ì„ ë„집어 낼 수 ìžˆê² ëŠ”ê°€? ì–´ë–¤ êµí›ˆì„ 얻었는가? ìžì‹ ì˜ ë””ìžì¸/í”„ë¡œê·¸ëž˜ë° ì‹¤ë ¥ì´ ëŠ˜ì—ˆë‹¤ëŠ” ìƒê°ì´ 드는가? 만약 ì´ ë¬¸ì œì˜ ëª¨ë“ "요구사í•+변경사í•ë“¤"ì´ í•œ ë©ì–´ë¦¬ì˜ "최초 요구사í•"으로 처ìŒë¶€í„° í•œêº¼ë²ˆì— ì£¼ì–´ì¡Œë‹¤ë©´ ìžì‹ ì€ ì–´ë–»ê²Œ ì´ ë¬¸ì œë¥¼ í’€ì—ˆì„ ê²ƒ ê°™ì€ê°€? 어떻게 ë¬¸ì œì— ì ‘ê·¼í–ˆì„ ê²ƒì´ë©°, ì–´ë–¤ ê³¼ì •ì„ ê±°ì³¤ì„까? ë˜, 어떻게 푸는 ê²ƒì´ íš¨ìœ¨ì ì¼ê¹Œ? 다른 친구와 PairProgrammingì„ í•´ì„œ ì´ ë¬¸ì œë¥¼ 다시 풀어보ë¼. ê·¸ 친구는 ë‚´ê°€ ì „í˜€ ìƒê°í•˜ì§€ ëª»í–ˆë˜ ê²ƒì„ ì œì•ˆí•˜ì§€ëŠ” 않는가? ê·¸ 친구로부터 ë¬´ì—‡ì„ ë°°ìš¸ 수 있는가? ë‘˜ì˜ ì‹œë„ˆì§€ 효과로 둘 중 ì•„ë¬´ë„ ëª°ëžë˜ ì–´ë–¤ ê²ƒì„ í•¨ê»˜ ê³ ì•ˆí•´ 내지는 않았는가? see also DoItAgainToLearn ---- * 질문: '''변경4'''ì—ì„œ ìŒì‹ì˜ 위치는 ì˜ë„ì 으로 바퀴가 지나가지 않는 ê³³ì— ë†“ì€ê±´ê°€ìš”? --["sun"] ---- ["ë¬¸ì œë¶„ë¥˜"]