All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0701_0800.s0789_escape_the_ghosts.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0701_0800.s0789_escape_the_ghosts;

// #Medium #Array #Math #2022_03_26_Time_0_ms_(100.00%)_Space_42.7_MB_(52.86%)

/**
 * 789 - Escape The Ghosts\.
 *
 * Medium
 *
 * You are playing a simplified PAC-MAN game on an infinite 2-D grid. You start at the point `[0, 0]`, and you are given a destination point target = [xtarget, ytarget] that you are trying to get to. There are several ghosts on the map with their starting positions given as a 2D array `ghosts`, where ghosts[i] = [xi, yi] represents the starting position of the ith ghost. All inputs are **integral coordinates**.
 *
 * Each turn, you and all the ghosts may independently choose to either **move 1 unit** in any of the four cardinal directions: north, east, south, or west, or **stay still**. All actions happen **simultaneously**.
 *
 * You escape if and only if you can reach the target **before** any ghost reaches you. If you reach any square (including the target) at the **same time** as a ghost, it **does not** count as an escape.
 *
 * Return `true` _if it is possible to escape regardless of how the ghosts move, otherwise return_ `false`_._
 *
 * **Example 1:**
 *
 * **Input:** ghosts = \[\[1,0],[0,3]], target = [0,1]
 *
 * **Output:** true
 *
 * **Explanation:** You can reach the destination (0, 1) after 1 turn, while the ghosts located at (1, 0) and (0, 3) cannot catch up with you. 
 *
 * **Example 2:**
 *
 * **Input:** ghosts = \[\[1,0]], target = [2,0]
 *
 * **Output:** false
 *
 * **Explanation:** You need to reach the destination (2, 0), but the ghost at (1, 0) lies between you and the destination. 
 *
 * **Example 3:**
 *
 * **Input:** ghosts = \[\[2,0]], target = [1,0]
 *
 * **Output:** false
 *
 * **Explanation:** The ghost can reach the target at the same time as you. 
 *
 * **Constraints:**
 *
 * *   `1 <= ghosts.length <= 100`
 * *   `ghosts[i].length == 2`
 * *   -104 <= xi, yi <= 104
 * *   There can be **multiple ghosts** in the same location.
 * *   `target.length == 2`
 * *   -104 <= xtarget, ytarget <= 104
**/
public class Solution {
    public boolean escapeGhosts(int[][] ghosts, int[] target) {
        int[] currPos = {0, 0};
        int selfDist = getDist(currPos, target);
        for (int[] ghost : ghosts) {
            int ghostDist = getDist(ghost, target);
            if (ghostDist <= selfDist) {
                return false;
            }
        }
        return true;
    }

    private int getDist(int[] p1, int[] p2) {
        return Math.abs(p1[0] - p2[0]) + Math.abs(p1[1] - p2[1]);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy