์คํ ์ดํธ ํจํด์ ๋ดค๋๋ฐ ์ฌ์ค ์ข ํ๋์ ๋ณด๊ธฐ ์ด๋ ค์์ ๊ทธ๋ฅ ์นด๋ฅด๋ ธ๋งต ๋ง๋ค๊ณ ๊ทธ๊ฑธ๋ก ์๋์๋ํ๋ ๋ฐฉ์์ผ๋ก ํ์.
์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ฒ๋ผ ์ผ๋ฐ ์ํ(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
์~ ์คํ ๋งํ ์ค๋๋ง์ด๋ค
์ ์ฉํ๊ธฐ๊ฐ ํธํด์ ๊ทธ๋ฐ์ง ๊ด์ฌ์ด ๊ฐ๋..