이 문제에서는 호텔의 도착과 출발을 나타내는 N개의 값과 정수 k로 구성된 두 개의 배열이 제공됩니다. 우리의 임무는 주어진 도착 및 출발 시간에 k개의 예약이 가능한지 찾는 것입니다.
문제 설명: 여기에서 k 개의 객실이 있는 호텔이 모든 도착 및 출발을 수용할 수 있는지 확인해야 합니다.
문제를 이해하기 위해 예를 들어 보겠습니다.
입력: 도착:{1 4 5 7}
출발 :{3 5 6 9}
K =1
출력: 예
해결 방법:
이 문제를 해결하기 위해 호텔의 도착 및 출발을 도착 또는 출발을 위한 레이블과 함께 보조 배열에 저장합니다. 그런 다음 이 배열을 정렬하고 호텔의 활성 예약 수를 계산합니다.
도착하면 카운트++
출발하는 경우 계산--.
어느 시점에서든 예약이 k 이상인 경우 거짓, 을 반환합니다. 그렇지 않으면 참을 반환합니다.
우리 솔루션의 작동을 설명하는 프로그램,
예시
#include <bits/stdc++.h> using namespace std; bool isBookingValid(int arrival[], int departure[], int n, int k){ vector<pair<int, int> > auxArray; int activeBookings = 0, maxBookings = 0; for (int i = 0; i < n; i++) { auxArray.push_back(make_pair(arrival[i], 1)); auxArray.push_back(make_pair(departure[i], 0)); } sort(auxArray.begin(), auxArray.end()); for (int i = 0; i < auxArray.size(); i++) { if (auxArray[i].second == 1) { activeBookings++; maxBookings = max(maxBookings, activeBookings); } else activeBookings--; } return (k >= maxBookings); } int main(){ int arrival[] = { 1, 4, 5, 7 }; int departure[] = { 3, 5, 6, 9 }; int k = 1; int n = sizeof(arrival) / sizeof(arrival[0]); if(isBookingValid(arrival,departure, n, k)) cout<<"All booking are possible"; else cout<<"Booking not possible"; return 0; }
출력
All booking are possible
또 다른 접근 방식:
보조 배열의 사용을 없앨 수 있습니다. 출발과 도착에 대해 주어진 두 개의 배열을 사용하여 호텔의 예약을 확인할 수 있습니다.
그런 다음 겹침을 확인하고 k보다 크면 false를 반환합니다. 그렇지 않으면 true를 반환합니다.
k개의 방이 있으므로 k 번째 를 확인하는 쉬운 방법이 있습니다. 도착하고 범위에 속하는지 확인하십시오.
우리 솔루션의 작동을 설명하는 프로그램,
예시
#include <bits/stdc++.h> using namespace std; bool isBookingPossible(int arrival[], int departure[], int K, int N){ sort(arrival, arrival + N); sort(departure, departure + N); for(int i = 0; i < N; i++) { if (i + K < N && arrival[i + K] < departure[i]) { return false; } } return true; } int main(){ int arrival[] = { 1, 2, 3 }; int departure[] = { 2, 3, 4 }; int N = sizeof(arrival) / sizeof(arrival[0]); int K = 1; if(isBookingPossible(arrival, departure, K, N)) cout<<"All booking are possible"; else cout<<"Booking not possible"; return 0; }
출력
All booking are possible