สมมติว่าเรามีหุ่นยนต์อยู่ที่ตำแหน่ง (0, 0) (ระนาบคาร์ทีเซียน) หุ่นยนต์มีรายการการเคลื่อนที่ที่ประกอบด้วย N (North), S (South), W (West), E (East) แต่ถ้าหุ่นยนต์ไปถึงจุดที่เคยไปมาก่อน มันจะเคลื่อนที่ต่อในทิศทางเดิมจนถึงจุดใหม่ที่ยังไม่เคยไป เราต้องตรวจสอบว่าหลังจากเคลื่อนที่ครบแล้ว หุ่นยนต์จะอยู่ที่พิกัด (x, y) หรือไม่
ตัวอย่าง: moves = ['N','N','E','N','W','S'], coord = [0, -1] ผลลัพธ์คือ True
ขั้นตอนการแก้ปัญหา
- กำหนด
nx = 0,ny = 0 - สร้างเซต
l = {(0, 0)} - สำหรับแต่ละ
kในmoves:- ถ้า
k == "N": วนลูป while(nx, ny) in lให้ny += 1 - ถ้า
k == "S": วนลูป while(nx, ny) in lให้ny -= 1 - ถ้า
k == "E": วนลูป while(nx, ny) in lให้nx += 1 - ถ้า
k == "W": วนลูป while(nx, ny) in lให้nx -= 1 - เพิ่ม
(nx, ny)เข้าl
- ถ้า
- คืนค่า
Trueถ้าcoord == (nx, ny)มิฉะนั้นFalse
ตัวอย่างโค้ด Python
class Solution:
def solve(self, moves, coord):
nx = ny = 0
visited = {(0, 0)}
for k in moves:
if k == "N":
while (nx, ny) in visited:
ny += 1
elif k == "S":
while (nx, ny) in visited:
ny -= 1
elif k == "E":
while (nx, ny) in visited:
nx += 1
else: # "W"
while (nx, ny) in visited:
nx -= 1
visited.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)) # Output: True
อินพุต / เอาต์พุต
Input: ['N','N','E','N','W','S'], [0, -1]
Output: True