# Roomba - Amazon Top Interview Questions

### Problem Statement :

```A Roomba robot is currently sitting in a Cartesian plane at (0, 0). You are given a list of its moves that it will make, containing NORTH, SOUTH, WEST, and EAST.

Return whether after its moves it will end up in the coordinate (x, y).

Constraints

n ≤ 100,000 where n is length of moves

Example 1

Input

moves = ["NORTH", "EAST"]
x = 1
y = 1

Output

True

Explanation

Moving north moves it to (0, 1) and moving east moves it to (1, 1)

Example 2

Input

moves = ["WEST", "EAST"]
x = 1
y = 0

Output

False

Explanation
This Roomba will end up at (0, 0)```

### Solution :

```                        ```Solution in C++ :

bool solve(vector<string>& moves, int x, int y) {
for (auto& move : moves) {
if (move.front() == 'N')
--y;
else if (move.front() == 'S')
++y;
else if (move.front() == 'W')
++x;
else if (move.front() == 'E')
--x;
}
if (!x && !y) return true;
return false;
}```
```

```                        ```Solution in Java :

import java.util.*;

class Solution {
public boolean solve(String[] moves, int ax, int ay) {
String px = "EAST";
String nx = "WEST";
String py = "NORTH";
String ny = "SOUTH";
int x = 0;
int y = 0;
for (int i = 0; i < moves.length; i++) {
if (moves[i].equals(px)) {
x++;
continue;
}

if (moves[i].equals(nx)) {
x--;
continue;
}
if (moves[i].equals(py)) {
y++;
continue;
}

if (moves[i].equals(ny)) {
y--;
}
}
if (x == ax && ay == y)
return true;
else
return false;
}
}```
```

```                        ```Solution in Python :

class Solution:
def solve(self, moves, x, y):
currX, currY = 0, 0
d = {
"EAST": (1, 0),
"WEST": (-1, 0),
"NORTH": (0, 1),
"SOUTH": (0, -1),
}
for i in moves:
dx, dy = d[i]
currX += dx
currY += dy
if currX == x and currY == y:
return True
return False```
```

## View More Similar Problems

Given a pointer to the head of a linked list, insert a new node before the head. The next value in the new node should point to head and the data value should be replaced with a given value. Return a reference to the new head of the list. The head pointer given may be null meaning that the initial list is empty. Function Description: Complete the function insertNodeAtHead in the editor below

## Insert a node at a specific position in a linked list

Given the pointer to the head node of a linked list and an integer to insert at a certain position, create a new node with the given integer as its data attribute, insert this node at the desired position and return the head node. A position of 0 indicates head, a position of 1 indicates one node away from the head and so on. The head pointer given may be null meaning that the initial list is e

## Delete a Node

Delete the node at a given position in a linked list and return a reference to the head node. The head is at position 0. The list may be empty after you delete the node. In that case, return a null value. Example: list=0->1->2->3 position=2 After removing the node at position 2, list'= 0->1->-3. Function Description: Complete the deleteNode function in the editor below. deleteNo

## Print in Reverse

Given a pointer to the head of a singly-linked list, print each data value from the reversed list. If the given list is empty, do not print anything. Example head* refers to the linked list with data values 1->2->3->Null Print the following: 3 2 1 Function Description: Complete the reversePrint function in the editor below. reversePrint has the following parameters: Sing