[LeetCode] Find Nearest Point That Has the Same X or Y Coordinate

준규·2022년 8월 10일
0

(문제가 길어서 읽기 힘들었다 ㅎㅎ;)

x,y 좌표가 주어지고 좌표가 들어있는 2차원 배열 points가 주어질 때

첫번째로 valid 좌표를 구하고 두번째로 valid 좌표 중 Manhattan distance 가 최소인 좌표의 인덱스 값을 구하면 되는 문제이다

문제를 두단계로 나누어 풀어보기로 생각하였다

Example 을 보면 valid point 가 없다면 -1을 리턴해야하므로 예외 처리를 해주면 될 것 같았다.

const nearestValidPoint = function(x, y, points) {
    let min = Infinity;
    let result = [-1]
    let index = []
    for(let i = 0; i < points.length ; i++) {
        if(points[i][0] === x | points[i][1] === y) {
            index.push(i);
        }
    }
    if(index.lenght === 0) {
        return -1
    }else {
         for(let i = 0; i < index.length; i++) {
       let distance =  Math.abs(points[index[i]][0] - x) + Math.abs(points[index[i]][1] - y)
        if(min > distance) {
            result.splice(0, result.length)
            result.push(index[i]);
            min  = distance
        }else if(min === distance) {
            result.push(index[i]);
            min= distance
        }
    }
    }
    return result[0]
};

먼저 valid point를 찾기 위해 반복문을 사용하여 valid point 의 인덱스를 index 배열에 넣어주었다

만약 반복문을 돌고나서 index의 길이가 0이라면 valid points 가 없는 것이므로 -1을 return 해주었다

valid points가 존재한다면 valid points를 탐색하면서 Manhattan distance가 최소인 포인트를 찾아야하는데

최소인 valid points가 다수라면 인덱스 값이 최소인 points를 찾아야 하므로

distance 가 현재 최소값과 같은 값이라면 인덱스 값을 푸쉬만 해주고

현재 최소값보다 작다면 현재 result 에 저장 되어있는 인덱스 값들을 초기화 해주고 현재 최소값의 인덱스를 넣어주었다.

그 후 result 배열의 0번째 인덱스를 리턴한다면 그것이 distance 가 최소인 point의 최소 인덱스이다!

submit 을 해보니 정답이었다

수행시간이 조금 긴것이 좀더 개선 방안이 있을 것 같다

profile
안녕하세요 :)

0개의 댓글