로봇의 움직임을 나타내는 문자열 s가 있다고 가정합니다. 로봇은 현재 (0, 0) 위치에 있으며 북쪽을 향하고 있습니다. 이동 문자열 s에는 다음 문자가 포함될 수 있습니다.
- 한 단위 앞으로 이동하려면 "F"를 누르세요.
- 왼쪽으로 90도 회전하는 "L"
- 오른쪽으로 90도 회전하는 "R"
따라서 로봇이 순서대로 이동을 반복하면 비행기에 로봇이 절대 떠나지 않는 상자가 있는지 확인해야 합니다.
따라서 입력이 s ="FFFRFRFFRF"와 같으면 로봇이 북쪽으로 2단위 이동하기 때문에 출력은 True가 됩니다. 그런 다음 오른쪽으로 90도 회전하여 한 블록 이동한 다음 다시 오른쪽으로 90도 회전하고 남쪽으로 2유닛 이동한 다음 다시 오른쪽으로 이동하여 상자를 형성합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 이동 :=방향이 포함된 배열 [[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
- s[i]가 "F"와 같으면
- r이 0과 같고 c가 0이면
- 참 반환
- 0에서 s 크기의 범위에 있는 i에 대해 다음을 수행합니다.
- 거짓을 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
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