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