1
class Solution {
2
public int robotSim(int[] commands, int[][] obstacles) {
3
int dir = 0; // states 0north-1east-2south-3west
4
int farthestSofar = 0;
5

6
int xloc = 0;
7
int yloc = 0;
8

9
Set<String> set = new HashSet<>();
10
for (int[] obs : obstacles) {
11
set.add(obs[0] + "," + obs[1]);
12
}
13

14
int steps;
15

16
for (int i : commands) {
17

18
if (i == -1) { // turn right 90
19
dir++;
20
} else if (i == -2) { // turn left 90
21
dir--;
22
} else { // move forward value of i baring no obsticals
23
dir = dir % 4;
24
if (dir == -1) {
25
dir = 3;
26
} else if (dir == -3) {
27
dir = 1;
28
} else if (dir == -2) {
29
dir = 2;
30
}
31
// dir %4 = -1 -> 3
32
// dir %4 = -2 -> 2
33
// dir %4 = -3 -> 1
34
if (dir == 0) {
35
steps = 0;
36
while (steps < i && !set.contains((xloc) + "," + (yloc + 1))) {
37
yloc++;
38
steps++;
39
}
40
} else if (dir == 1) {
41
steps = 0;
42
while (steps < i && !set.contains((xloc + 1) + "," + (yloc))) {
43
xloc++;
44
steps++;
45
}
46
} else if (dir == 2) {
47
steps = 0;
48
while (steps < i && !set.contains((xloc) + "," + (yloc - 1))) {
49
yloc--;
50
steps++;
51
}
52
} else { // case dir == 3
53
steps = 0;
54
while (steps < i && !set.contains((xloc - 1) + "," + (yloc))) {
55
xloc--;
56
steps++;
57
}
58
}
59
}
60
farthestSofar = Math.max(farthestSofar, xloc * xloc + yloc * yloc);
61
}
62
return farthestSofar;
63
}
64
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0