n석의 예약 상태를 관리하는 시스템을 설계해야 한다고 가정합니다. 좌석은 1부터 n까지 번호가 매겨져 있습니다. 따라서 다음과 같은 기능으로 SeatReserveManager 클래스를 구현해야 합니다. −
-
n을 입력으로 사용하고 1에서 n까지 번호가 매겨진 n개의 좌석을 관리할 객체를 초기화하는 생성자. 처음에는 모든 좌석을 사용할 수 있습니다.
-
reserved(), 이것은 가장 작은 번호의 예약되지 않은 좌석을 가져온 다음 예약하고 그 번호를 반환합니다.
-
unreserve(seatNumber), 이는 givenseatNumber로 하나의 지정 좌석을 예약 해제합니다.
따라서 입력이 다음과 같으면
-
obj =SeatReserveManager(7)
-
obj.reserve()
-
obj.reserve()
-
obj.reserve()
-
obj.unreserve(2)
-
obj.unreserve(5)
-
obj.reserve()
-
obj.reserve()
그러면 출력은 1, 2, 3, 2, 5가 됩니다. 처음에는 3개의 좌석 1, 2, 3을 예약한 다음 2와 5를 예약하지 않았지만 5는 아직 예약하지 않고 다음에 5를 예약합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
Constructor() 를 정의하십시오. n
소요됩니다. -
current_seat :=0
-
empty_seats :=새 목록
-
Reserve() 함수를 정의합니다. 시간이 걸립니다
-
empty_seats의 길이> 0이면
-
s :=최소 empty_seats
-
empty_seats에서 s 삭제
-
반환 s
-
-
current_seat :=current_seat + 1
-
current_seat 반환
-
unreserve() 함수를 정의합니다. 이것은 자리를 차지할 것입니다.
-
empty_seats
끝에 seatNumber 삽입
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
class SeatReserveManager: def __init__(self, n): self.current_seat = 0 self.empty_seats = [] def reserve(self): if len(self.empty_seats) > 0: s = min(self.empty_seats) self.empty_seats.remove(s) return s self.current_seat += 1 return self.current_seat def unreserve(self, seatNumber): self.empty_seats.append(seatNumber) obj = SeatReserveManager(7) print(obj.reserve()) print(obj.reserve()) print(obj.reserve()) obj.unreserve(2) obj.unreserve(5) print(obj.reserve()) print(obj.reserve())
입력
obj = SeatReserveManager(7) print(obj.reserve()) print(obj.reserve()) print(obj.reserve()) obj.unreserve(2) obj.unreserve(5) print(obj.reserve()) print(obj.reserve())
출력
1 2 3 2 5