Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 방문한 지점을 계속 이동하여 로봇이 목표에 도달할 수 있는지 확인하는 프로그램

<시간/>

현재 위치 (0, 0)(직교 평면)에 앉아 있는 로봇이 있다고 가정합니다. N(북쪽), S(남쪽), W(서쪽), E(동쪽)를 포함하여 할 수 있는 움직임 목록이 있는 경우. 그러나 로봇이 이전에 있었던 지점에 도달하면 새로운 방문하지 않은 지점에 도달할 때까지 같은 방향으로 계속 이동합니다. 이동 후 (x, y) 좌표에서 끝나는지 여부를 확인해야 합니다.

따라서 입력이 다음과 같으면

Python에서 방문한 지점을 계속 이동하여 로봇이 목표에 도달할 수 있는지 확인하는 프로그램

move =['N','N','E','N','W','S'], coord =[0, -1]이면 로봇이 두 번 이동하므로 출력은 True가 됩니다. 위, 오른쪽, 다시 위로, 왼쪽 하나, 아래로 현재 위치를 방문하면 아래로 이동한 다음 해당 위치도 방문하고 다시 아래로 이동하므로 위치 (0, -1)에서 멈춥니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • ny :=0, nx :=0

  • l :=새 세트, 처음에 좌표(0, 0) 삽입

  • 이동의 각 k에 대해 수행

    • k가 "N"과 같으면

      • 동안 (nx, ny) l에서 수행

        • ny :=ny + 1

    • 그렇지 않으면 k가 "S"와 같을 때

      • 동안 (nx, ny) l에서 수행

        • ny :=ny − 1

    • 그렇지 않으면 k가 "E"와 같을 때

      • 동안 (nx, ny) l에서 수행

        • nx :=nx + 1

    • 그렇지 않으면

      • 동안 (nx, ny) l에서 수행

        • nx :=nx − 1

    • l에 추가(nx, ny)

  • 좌표가 (nx, ny)와 같으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

class Solution:
   def solve(self, moves, coord):
      ny = nx = 0
      l = {(0, 0)}
      for k in moves:
         if k == "N":
            while (nx, ny) in l:
               ny += 1
         elif k == "S":
            while (nx, ny) in l:
               ny -= 1
         elif k == "E":
            while (nx, ny) in l:
               nx += 1
         else:
            while (nx, ny) in l:
               nx -= 1
         l.add((nx, ny))
      return coord[0] == nx and coord[1] == ny

ob = Solution()
moves = ['N','N','E','N','W','S']
coord = [0,-1]
print(ob.solve(moves, coord))

입력

['N','N','E','N','W','S'], [0,-1]

출력

True