학생과 좌석의 배열이 각각 주어질 때, 각 학생을 한 좌석에 배치하는데 필요한 최소 이동 횟수를 구하는 문제입니다. 학생은 좌석의 위치를 1씩 증가 또는 감소시켜 이동할 수 있습니다. 학생들은 각기 다른 좌석에 배치되어야 합니다.
다음과 같은 이동을 몇 번이고 수행할 수 있습니다:
• i번째 학생의 위치를 1 증가 또는 감소시키는 것 (즉, i번째 학생을 위치 x에서 x + 1 또는 x - 1로 이동)
학생과 좌석의 초기 위치는 배열로 주어집니다. 학생 배열과 좌석 배열의 길이는 n으로 같으며, 각각의 위치 값은 1 이상 100 이하의 정수입니다.
주어진 예제와 설명은 다음과 같습니다:
입력: seats = [3,1,5], students = [2,7,4]
출력: 4
설명: 학생들은 다음과 같이 이동합니다:
• 첫 번째 학생은 위치 2에서 위치 1로 1번 이동합니다.
• 두 번째 학생은 위치 7에서 위치 5로 2번 이동합니다.
• 세 번째 학생은 위치 4에서 위치 3으로 1번 이동합니다.
총 이동 횟수는 1 + 2 + 1 = 4입니다.
입력: seats = [4,1,5,9], students = [1,3,2,6]
출력: 7
설명: 학생들은 다음과 같이 이동합니다:
• 첫 번째 학생은 이동하지 않습니다.
• 두 번째 학생은 위치 3에서 위치 4로 1번 이동합니다.
• 세 번째 학생은 위치 2에서 위치 5로 3번 이동합니다.
• 네 번째 학생은 위치 6에서 위치 9로 3번 이동합니다.
총 이동 횟수는 0 + 1 + 3 + 3 = 7입니다.
입력: seats = [2,2,6,6], students = [1,3,2,6]
출력: 4
설명: 같은 위치에 여러 좌석이나 학생이 있을 수 있습니다:
• 첫 번째 학생은 위치 1에서 위치 2로 1번 이동합니다.
• 두 번째 학생은 위치 3에서 위치 6으로 3번 이동합니다.
• 세 번째 학생은 이동하지 않습니다.
• 네 번째 학생은 이동하지 않습니다.
총 이동 횟수는 1 + 3 + 0 + 0 = 4입니다.
• n == seats.length == students.length
• 1 <= n <= 100
• 1 <= seats[i], students[j] <= 100
class Solution:
def minMovesToSeat(self, seats: List[int], students: List[int]) -> int:
seats.sort()
students.sort()
total_moves = 0
for seat, student in zip(seats, students):
total_moves += abs(seat - student)
return total_moves