(문제가 길어서 읽기 힘들었다 ㅎㅎ;)
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 을 해보니 정답이었다
수행시간이 조금 긴것이 좀더 개선 방안이 있을 것 같다