var minMovesToSeat = function(seats, students) {
seats.sort((a,b) => a-b)
students.sort((a,b) => a-b)
return students.reduce((acc, cur, idx) => acc + Math.abs(cur - seats[idx]), 0)
};
문제의 요구사항이 처음에는 다소 헷갈리고 복잡할 수 있는데 조금 고민해보면 생각보다 간단하단 걸 알 수 있다.
간략하게 표현하면 한 배열(seats
나students
)을 다른 한 배열과 일치하도록 만드는 데 최소한 몇 번의 움직임이 필요하냐이다. 즉, 두 배열을 비교하는 문제이다.
최솟값을 구하기 위해서 둘 다 오름차순으로 정렬한다.
reduce 메소드를 이용해서 같은 인덱스에서의 움직임(두 배열의 요소의 차)를 계산하고 누적시킨다.