์Šคํ…Œ์ดํŠธ ํŒจํ„ด์„ ๋ดค๋Š”๋ฐ ์‚ฌ์‹ค ์ข€ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์–ด๋ ค์›Œ์„œ ๊ทธ๋ƒฅ ์นด๋ฅด๋…ธ๋งต ๋งŒ๋“ค๊ณ  ๊ทธ๊ฑธ๋กœ ์š”๋ž˜์š”๋ž˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ–ˆ์Œ.




viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8777a16fb3dab004c86b6fe0f25512895f218dec112c1029e51c14fd21fa03ddda13b081f4f522527ae3a8e4d1d62225320d9ab1d9af128af7



์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ผ๋ฐ˜ ์ƒํƒœ(R) ์ผ ๋•Œ ์˜ค๋ธŒ์ ํŠธ๋ณ„ ํ–‰๋™,


๋งฅ์ฃผ ํ•œ์ž” ๋งˆ์‹  ์ƒํƒœ(B)์ผ ๋•Œ ์˜ค๋ธŒ์ ํŠธ๋ณ„ ํ–‰๋™,


๊ทธ๋ฆฌ๊ณ  ์ž์‚ด ๋ถ€์Šค์— ๋“œ๊ฐ€์„œ ์ฃฝ์€ ์ƒํƒœ(D)



์ € ์›์ž์ฒ˜๋Ÿผ ์ƒ๊ธด ์นœ๊ตฌ๋“ค์„ ๊ทธ๋ฆฌ๋ฉด ์„œ๋กœ์˜ ๊ด€๊ณ„(์™ผ์ชฝ์˜ ํ‘œ)๋ฅผ 2d ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.


map: [[0, 0, 0, 1, 2, 0, 0, 0],ย ย ย ย ย ย ย ย ย  // normal robot state
ย ย ย ย ย ย ย ย ย ย ย ย [1, 1, 1, 0, 2, 1, 1, 1],ย ย ย ย ย ย ย ย // beer-ed robot state
ย ย ย ย ย ย ย ย ย ย ย ย [2, 2, 2, 2, 2, 2, 2, 2]] ย  ย  ย  // dead


์˜ˆ๋ฅผ๋“ค์–ด์„œ map[0][3] = 1 ์ธ๋ฐ ์ด๊ฑด 'B' ์˜ค๋ธŒ์ ํŠธ์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ ์ƒํƒœ๋ฅผ 1(๋งฅ์ฃผ ๋จน์€)๋กœ ๋ฐ”๊พธ๋ผ๋Š” ๋ง์ž„.


'B'๋ฅผ ๋จน์€ ์ƒํƒœ(state=1)์—์„œ ๋‹ค์‹œ 'B'๋ฅผ ๋จน์œผ๋ฉด map[1][3] = 0 ์ด๋‹ˆ, ์›๋ž˜ ์ƒํƒœ(state=0)๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ.



๊ทธ๋Ÿผ ์ € ๋ฐฐ์—ด์„ ํ†ตํ•ด์„œ ์ƒํƒœ ๋ณ€ํ™”์˜ ๊ด€๊ณ„๋Š” ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜๋„ ์žˆ๊ณ  ์ˆ˜์ •๋„ ํ•  ์ˆ˜ ์žˆ์Œ. ์ฃผ์„์„ ์จ์ฃผ๋ฉด ๋” ์•Œ๊ธฐ ์‰ฝ๊ฒ ์ง€.


์ด ๋•Œ, ์˜ค๋ธŒ์ ํŠธ๋ณ„๋กœ enum์„ ์“ฐ๋ฉด ์˜ค๋ธŒ์ ํŠธ(' ', 'B', '#' ๋“ฑ๋“ฑ)๋ฅผ 0~7 ๊นŒ์ง€ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋กœ๋ด‡์˜ ์ƒํƒœ๋ฅผ ๊ทธ๋ƒฅ ๋ฐฐ์—ด์—์„œ ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋”ฉํ•  ๋•Œ ์•„์ฃผ ํŽธํ•ด์ง.


ํŠน์ดํ•œ๊ฑด state = 2 ์ธ๋ฐ, dead state๊ฐ€ ๋˜๋ฉด ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ๊ฐ’์ด 2์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ์ƒํƒœ๋กœ ๋ณ€ํ™”๋  ์ˆ˜ ์—†๋Š”, ์ผ์ข…์˜ ์ˆ˜๋ ด์ด ๋œ ์ƒํƒœ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ.



์œ„์—์„œ enum์„ ์“ด๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ switch๋ฅผ ์ด์šฉํ•ด์„œ ๋ณ€๊ฒฝํ•ด์ค˜๋„ ๋จ. ์ด ๊ฒฝ์šฐ์—


switch(c) {

case ' ':

move();

return 0;

...

}


์ด๋ ‡๊ฒŒ ์จ์ฃผ๋ฉด ๊ณต๋ฐฑ ๋ฌธ์ž(' ')๋Š” map[state][object] ์—์„œ object์— ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜์— ๋“ค์–ด๊ฐ€๊ฒŒ๋จ. ๊ทธ๋Ÿฐ๋ฐ ์ €๊ฑด ์ข€ ์•ˆ์ข‹์€๊ฒŒ ์žˆ๋Š”๋ฐ ์ƒํƒœ ๋ณ€๊ฒฝ ์ด์ „์— ํ–‰๋™์ด ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ๋จ.


๋ฌธ์ œ์—์„œ ์„œ์ˆ ๋œ ๊ทœ์น™๋“ค (๋กœ๋ด‡์ด ' ' ์œ„์— ์žˆ์œผ๋ฉด ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•œ๋‹ค, 'B' ์œ„์— ์žˆ์œผ๋ฉด breaker mode๊ฐ€ ๋œ๋‹ค, ๋“ฑ๋“ฑ)์„ ์ฝ”๋“œ๋กœ ์„œ์ˆ ํ•˜๊ณ ๋‚˜๋ฉด


๋กœ๋ด‡์€ ์ด์ œ ์ž๋™์œผ๋กœ ์›€์ง์ผ ์ค€๋น„๊ฐ€ ๋‹ค ๋๋‚ฌ์Œ.



๋กœ๋ด‡์ด ์‚ด์•„ ์›€์ง์ด๋„๋ก ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Œ.


while(robot.state !== 2) {
ย ย ย  robot.state = robot.map[robot.state][update[robot.look()]];
ย ย ย  behave(robot.look());

}


๋กœ๋ด‡์ด ์ฃฝ๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉฐ ์ฃผ๋ณ€ ํ™˜๊ฒฝ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ฒŒ ๋จ.


robot.look() ํ•จ์ˆ˜๋กœ ํ˜„์žฌ ๋กœ๋ด‡์ด ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ , update์—์„œ ํ•ด๋‹น ํƒ€์ผ์„ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝํ•จ.


state = map[state][object]


์ด ๋ผ์ธ์œผ๋กœ ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ณ , behave(robot.look()) ๋ผ์ธ์—์„œ ํ•ด๋‹น ํƒ€์ผ์˜ ํšจ๊ณผ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•จ.


์ฆ‰, ํ™˜๊ฒฝ์„ ์กฐ์‚ฌํ•˜๊ณ  -> ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  -> ํ–‰๋™ ํ•˜๋Š” ์‚ฌ์ดํด์„ ๋„๋Š” ์ฝ”๋“œ์ž„.



state machine์€ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๊ณ , ๊ทธ๊ฑธ ๋ฐฐ์—ด๋กœ ๋‚˜ํƒ€๋ƒ„


๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ ,


๊ฐ ์ƒํƒœ๋ณ„๋กœ ํ–‰๋™ํ•˜๋Š”๊ฒŒ ์žˆ๋‹ค๋ฉด ์‹คํ–‰ํ•˜๋Š” ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค๋Š” ๊ฐœ๋…์ด๋ผ ์ƒ๊ฐ๋ณด๋‹ค ์“ฐ๊ธฐ๊ฐ€ ์ข‹์Œ.



๊ทผ๋ฐ ์ฝ”๋“œ๊ฐ€ ์ข€ ๊ฑฐ์ฐฝํ•ด์ง€๋Š” ๋А๋‚Œ์ด ์žˆ๊ธดํ•จ;;; ๋‚ด๊ฐ€ ํ—ˆ์ ‘์ด๋ผ ๊ทธ๋Ÿด ์ˆ˜๋„ ์žˆ์ง€๋งŒ ...


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ง  bender ep.1 ์˜ ์ฝ”๋“œ์ž„. https://pastebin.com/mpZbUfER