개발 일지
789. Escape The Ghosts(유령으로부터 탈출) 본문
무한한 2D 그리드에서 단순화된 PAC-MAN 게임을 플레이하고 있습니다. [0, 0] 지점에서 시작하면 도달하려는 목적지 target = [xtarget, ytarget]이 주어집니다. 지도에는 시작 위치가 2D 배열 ghosts로 제공되는 여러 유령이 있으며, 여기서 ghosts[i] = [xi, yi]는 ith 유령의 시작 위치를 나타냅니다. 모든 입력은 적분 좌표입니다.
각 턴마다 여러분과 모든 유령은 독립적으로 북쪽, 동쪽, 남쪽, 서쪽의 네 가지 기본 방향 중 하나로 한 단위씩 움직이거나 가만히 있을 수 있습니다. 모든 행동은 동시에 이루어집니다.
유령이 도달하기 전에 목표물에 도달할 수 있는 경우에만 탈출합니다. 유령과 동시에 목표물을 포함한 모든 사각형에 도달한 경우 탈출로 간주되지 않습니다.
유령의 움직임에 관계없이 탈출할 수 있다면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
예시 1:
입력: ghosts = [[1,0],[0,3]], target = [0,1]
출력: true
설명: 당신은 1턴 후에 target(0, 1)에 도착할 수 있지만, (1, 0)과 (0, 3)에 위치한 유령들은 당신을 따라잡을 수 없습니다.
예시 2:
입력: ghosts = [[1,0]], target = [2,0]
출력: false
설명: target(2, 0)에 도달해야 하지만 (1, 0)에 있는 ghost가 당신과 목적지 사이에 있습니다.
예시 3:
입력: ghosts = [[2,0]], target = [1,0]
출력: false
설명: 유령은 당신과 동시에 목표에 도달할 수 있습니다.
조건:
- 1 <= ghosts.length <= 100
- ghosts[i].length == 2
- -104 <= xi, yi <= 104
- 같은 장소에 여러 명의 유령이 있을 수 있습니다.
- target.length == 2
- -104 <= xtarget, ytarget <= 104
정답:
public class Solution {
public bool EscapeGhosts(int[][] ghosts, int[] target) {
int targetRange = Math.Abs(target[0]) + Math.Abs(target[1]);
for (int i = 0; i < ghosts.Length; i++)
{
if (targetRange >= Math.Abs(target[0] - ghosts[i][0]) + Math.Abs(target[1] - ghosts[i][1]))
{
return false;
}
}
return true;
}
}
해설: 내가 유령보다 target의 위치에 더 빨리 도착하면 true 아니라면 false를 return합니다.
우선 targetRange에 나와 target까지의 거리를 구합니다.
그 이후 ghost와 target까지의 거리를 구하고 targetRange와 비교합니다.
만약 ghost의 거리가 targetRange보다 작거나 같다면 false 모두 아니라면 true를 return합니다.