PythonTODAY-PICK

Python) Reeborg’s World Maze – 알고리즘

일요일에는 Maze 부분 못 풀었는데 정답 보기는 싫고 어떻게든 알아서 풀어보고자 했고,

퇴근하고 와서 다시 Maze 부분 붙들고 풀다가 풀었습니다.

뭐 만들 때 안 풀리면 하루 잠을 자고 다음 날 풀거나 산책하고 와서 풀거나, 커피 마시고 돌아와서 풀고, 수학 문제처럼 머리 속에 두고두고 있다가 어떻게 하다보면 풀리는 것 같습니다.

Reeborg’s World – Maze 편

python 함수 move() 를 넣으면 움직이고, turn_left()하면 왼쪽으로 돕니다.

front_is_clear(), wall_in_front(), right_is_clear(), wall_on_right(), at_goal() 이 부분은 True / False 로 반환 받을 수 있습니다받는 부분입니다.

while로 루프 써서,

저 미로를 로봇이 도착지점까지 올 수 있도록 코드를 짜는 것이 요 미로 편이였습니다.

미로 풀기는 하단 링크에서 할 수 있습니다.

https://reeborg.ca/reeborg.html?lang=en&mode=python&menu=worlds%2Fmenus%2Freeborg_intro_en.json&name=Maze&url=worlds%2Ftutorial_en%2Fmaze1.json

주어지는 미로 속에서 로봇이 잘 헤쳐나갈 수 있도록 많은 경우의 수를 고려해서 코드를 짜는 걸 알고리즘이라고 합니다.

로봇이 보는 곳은 동서남북 중 랜덤으로 방향이 정해집니다.

풀었던 코드:

이렇게 저렇게 풀어보다가 풀었던 코드는 이 방법이었습니다.

def turn_north():
    while is_facing_north() != True:
        turn_left()

def turn_west():
    turn_north()
    turn_left()
    turn_left()
    turn_left()
        
turn_west()            
while at_goal() != True:
    if front_is_clear() and wall_on_right():
        move()
    if wall_in_front() and right_is_clear():
        turn_left()
        turn_left()
        turn_left()
        move()
    if wall_in_front() and wall_on_right():
        turn_left()
    if front_is_clear() and right_is_clear():
        turn_left()
        turn_left()
        turn_left()
        move()
    elif front_is_clear():
        move()

이 중에서 약간 핵심이라고 생각하는 조건이 front_is_clear() and right_is_clear()일 때 어느 방향으로 움직일 지 설정해 주는 거였습니다. 미로를 푸는 방법은 벽을 따라 오른쪽으로 쭉 돌다보면 나가는 곳이 보일테니 오른쪽으로 가도록 설정을 하고, 하지만 벽이 막혀 있다면 왼쪽으로 틀어주는 방법. 으로.

이렇게 저렇게 실험하 듯 짜다보니 코드가 정리되지 않았는데,

저 turn_left() 3번 쓰는 걸 함수로 묶는

def turn_right():
   turn_left()
   turn_left()
   turn_left()

대략 어떻게 움직일지 동작하는 걸 구현했지만 좀 더 깔끔한 코드 리팩토링이 필요할 것 같네요.

깊이 우선 탐색, 넓이 우선 탐색 이런 걸 뭔가 몸으로 체득하듯이 코드를 짜는 것 같아서 저 사이트 정말 유용하다고 생각합니다.

문제는 답지 없이 꼭 풀고. 어떻게든 혼자 힘으로 풀어내는 걸 추천합니다 🤖🤖🤖🤖🤖

굳었던 머리가 말랑해지는?? 좋아지는 느낌도 듭니다.

치매 예방! 두뇌 회전!

(무슨 광고 같아ㅋㅋㅋㅋ)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!