Minimum Number of Moves to Seat Everyone

제로콜라좋아요·2024년 6월 13일
0

algorithem

목록 보기
25/37

문제설명

학생과 좌석의 배열이 각각 주어질 때, 각 학생을 한 좌석에 배치하는데 필요한 최소 이동 횟수를 구하는 문제입니다. 학생은 좌석의 위치를 1씩 증가 또는 감소시켜 이동할 수 있습니다. 학생들은 각기 다른 좌석에 배치되어야 합니다.

다음과 같은 이동을 몇 번이고 수행할 수 있습니다:

•	i번째 학생의 위치를 1 증가 또는 감소시키는 것 (즉, i번째 학생을 위치 x에서 x + 1 또는 x - 1로 이동)

학생과 좌석의 초기 위치는 배열로 주어집니다. 학생 배열과 좌석 배열의 길이는 n으로 같으며, 각각의 위치 값은 1 이상 100 이하의 정수입니다.

주어진 예제와 설명은 다음과 같습니다:

예제 1:

입력: seats = [3,1,5], students = [2,7,4]
출력: 4
설명: 학생들은 다음과 같이 이동합니다:

•	첫 번째 학생은 위치 2에서 위치 1로 1번 이동합니다.
•	두 번째 학생은 위치 7에서 위치 5로 2번 이동합니다.
•	세 번째 학생은 위치 4에서 위치 3으로 1번 이동합니다.

총 이동 횟수는 1 + 2 + 1 = 4입니다.

예제 2:

입력: 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입니다.

예제 3:

입력: 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

<내 코드의 흐름>

  1. minMovesToSeat라는 메서드를 정의합니다.
  • 이 메서드는 두 개의 리스트 seats와 students를 받아서 정수 값을 반환합니다.
  1. seats 리스트를 오름차순으로 정렬합니다.
  2. students 리스트를 오름차순으로 정렬합니다.
  3. 총 이동 횟수를 저장할 변수를 0으로 초기화합니다.
  4. seats와 students 리스트를 동시에 순회하면서 각 seat와 student 쌍을 얻습니다.
  5. 현재 seat와 student 사이의 거리를 계산하여 total_moves에 더합니다.
  6. 계산된 총 이동 횟수를 반환합니다.
profile
개발자계의 제로콜라

0개의 댓글