오늘의 공부 키워드
- 2037 Minimum Number of Moves to seat EveryOne
2037 Minimum Number of Moves to Seat Everyone
- 문제 상황:
- 학교에 학생들이 있고, 자리가 있어요.
- 각 학생은 특정 위치에 있고, 각 자리는 특정 위치에 있어요.
- 학생들은 한 번에 한 칸씩 앞이나 뒤로 움직일 수 있어요.
- 모든 학생들이 각기 다른 자리에 앉도록 해야 해요.
- 목표:
- 모든 학생들이 자리에 앉을 때, 학생들이 움직이는 횟수를 최소화하는 것이 목표예요.
해결 방법
이 문제를 해결하는 방법을 단계별로 설명할게요:
Step 1: 문제 이해하기
학생들을 자리에 앉힐 때 움직이는 횟수를 최소화하려면 어떻게 해야 할까요? 가장 좋은 방법은 자리에 가까운 학생을 그 자리에 앉히는게 제일 좋다.
Step 2: 정렬하기
먼저, 학생들과 자리를 각각 정렬한다. 이렇게 하면 각 자리와 가장 가까운 학생을 쉽게 찾을 수 있다.
Step 3: 매칭하기
정렬한 후, 각 자리에 가장 가까운 학생을 하나씩 매칭한다. 이 때, 각 학생이 자리에 앉기 위해 움직여야 하는 칸 수를 계산한다.
Step 4: 결과 계산하기
모든 학생들이 자리에 앉기 위해 움직인 칸 수를 모두 더한다. 이 값이 우리가 찾는 최소 움직임의 횟수이다.
코드
def min_moves_to_seats(seats, students):
seats.sort()
students.sort()
total_moves = 0
for seat, student in zip(seats, students):
total_moves += abs(seat - student)
return total_moves
# 예제 테스트
print(min_moves_to_seats([3, 1, 5], [2, 7, 4])) # 출력: 4
print(min_moves_to_seats([4, 1, 5, 9], [1, 3, 2, 6])) # 출력: 7
print(min_moves_to_seats([2, 2, 6, 6], [1, 3, 2, 6])) # 출력: 4
코드 설명
- 함수 정의: min_moves_to_seats(seats, students)는 자리와 학생들의 위치를 입력으로 받아요.
- 정렬: seats.sort()와 students.sort()를 사용해 자리와 학생들의 위치를 오름차순으로 정렬해요.
- 이동 횟수 계산:
- total_moves를 0으로 초기화해요.
- for seat, student in zip(seats, students):로 자리와 학생들의 위치를 동시에 순회하며 이동 횟수를 계산해요.
- abs(seat - student)로 각 자리와 학생 간의 이동 횟수를 계산하고, total_moves에 더해요.
- 결과 반환: 모든 이동 횟수를 더한 total_moves를 반환해요.
예제
- 입력: 자리 [3, 1, 5], 학생 [2, 7, 4]
- 정렬 후: 자리 [1, 3, 5], 학생 [2, 4, 7]
- 계산: 1 + 1 + 2 = 4
- 출력: 4
이 코드는 학생들이 자리에 앉기 위해 최소한으로 움직여야 하는 횟수를 계산해요.
오늘의 회고
- 부족함을 느끼지만 실력을 늘리는것이 제일 빠른길임을 명심하자
- 새로운 개념을 배울수 있어서 좋았다.
'python' 카테고리의 다른 글
99클럽 코테 스터디 18일차 TIL (1) | 2024.06.15 |
---|---|
99클럽 코테 스터디 17일차 TIL (0) | 2024.06.14 |
99클럽 코테 스터디 15일차 TIL (1) | 2024.06.12 |
99클럽 코테 스터디 14일차 TIL (0) | 2024.06.11 |
99클럽 코테 스터디 13일차 TIL + 이진 탐색 (0) | 2024.06.10 |