[태그:] python함수연습

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

    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 !!