1. 문제 파악
- 하루에 책을 읽을 수 있는 학생의 수와 모든 학생이 책을 읽기 위해서 필요한 책의 수를 구하기 위해서 책을 읽기 시작하는 시점과 종료하는 시점에 따른 정렬이 필요합니다.
- 하나의 열이 정렬될 때 다른 열도 함께 변동돼야 하기 때문에 Comparator를 활용합니다.
- 한 명의 학생이 책을 다 읽으면 다른 학생이 책을 읽을 수 있도록 우선순위 큐를 활용합니다.
2. 풀이
- 책은 한 권만 주어지기 때문에 한 명의 학생이 책을 다 읽었을 때 다른 학생이 책을 읽을 수 있으므로 종료시간이 빠를수록 다른 학생이 책을 읽을 수 있는 기회가 더 많이 주어집니다. 따라서, 종료 시간을 기준으로 정렬합니다.
- 한 명이 책을 다 읽으면 곧바로 다른 사람한테 책을 넘길 수 있고, 다시 종료 시간을 갱신해야 합니다. 최대 학생 수를 구해야 하기 때문에 책을 넘길 때마다 학생 수를 카운트합니다.
- 다른 책을 빌려서라도 모든 학생들이 책을 읽을 수 있도록 하기 위해서는 책을 읽기 시작하는 시간을 기준으로 정렬해야 합니다. 한 명이 3시에 책을 다 읽을 수 있는데 다른 학생이 2시부터 책 읽기가 가능하다면 책을 한 권 더 대출하면 됩니다.
- 책을 읽기 시작하는 시점은 학생마다 다르고, 어떤 학생이 내가 책을 읽기 시작하는 시간보다 더 빨리 책을 읽게 되면 그 책을 이어서 읽을 수 있기 때문에 이를 위해서 우선순위 큐를 사용합니다.
- 우선순위 큐의 역할이 학생들에게 책을 배정하는 것이므로 우선순위 큐의 크기가 책의 최소 대출 권수가 됩니다.