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

Python에서 로봇이 경계 상자 내에서 움직이는지 확인하는 프로그램

<시간/>

로봇의 움직임을 나타내는 문자열 s가 있다고 가정합니다. 로봇은 현재 (0, 0) 위치에 있으며 북쪽을 향하고 있습니다. 이동 문자열 s에는 다음 문자가 포함될 수 있습니다.

  • 한 단위 앞으로 이동하려면 "F"를 누르세요.
  • 왼쪽으로 90도 회전하는 "L"
  • 오른쪽으로 90도 회전하는 "R"

따라서 로봇이 순서대로 이동을 반복하면 비행기에 로봇이 절대 떠나지 않는 상자가 있는지 확인해야 합니다.

따라서 입력이 s ="FFFRFRFFRF"와 같으면 로봇이 북쪽으로 2단위 이동하기 때문에 출력은 True가 됩니다. 그런 다음 오른쪽으로 90도 회전하여 한 블록 이동한 다음 다시 오른쪽으로 90도 회전하고 남쪽으로 2유닛 이동한 다음 다시 오른쪽으로 이동하여 상자를 형성합니다.

Python에서 로봇이 경계 상자 내에서 움직이는지 확인하는 프로그램

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

  • 이동 :=방향이 포함된 배열 [[0, -1], [1, 0], [0, 1], [-1, 0]]
  • r, c :=0, 0
  • d :=0
  • 0~3 범위의 시간에 대해
    • 0에서 s 크기의 범위에 있는 i에 대해 다음을 수행합니다.
      • s[i]가 "F"와 같으면
        • (r, c) :=(r + 이동[d, 0], c + 이동[d, 1])
      • 그렇지 않으면 s[i]가 "L"과 같을 때
        • d :=(d + 3) 모드 4
      • 그렇지 않으면 s[i]가 "R"과 같을 때
        • d :=(d + 1) 모드 4
    • r이 0과 같고 c가 0이면
      • 참 반환
  • 거짓을 반환

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

def solve(s):
   moves = [[0, -1], [1, 0], [0, 1], [-1, 0]]
   r, c = 0, 0
   d = 0

   for times in range(4):
      for i in range(len(s)):
         if s[i] == "F":
            r, c = r + moves[d][0], c + moves[d][1]
         elif s[i] == "L":
            d = (d + 3) % 4
         elif s[i] == "R":
            d = (d + 1) % 4
      if r == 0 and c == 0:
         return True
   return False

s = "FFRFRFFRF"
print(solve(s))
반환

입력

"FFRFRFFRF"

출력

True