time1은 시작 시간을 나타내고 time2는 이벤트의 종료 시간을 나타내는 값(time1, time2)으로 구성된 간격 집합이 주어졌다고 가정합니다. 우리의 임무는 이러한 간격이 이 세트의 다른 간격과 겹치는지 여부를 확인하는 것입니다. 간격 중 하나라도 겹치면 결과를 True로 반환하고 그렇지 않으면 False를 반환합니다.
따라서 입력이 [(4,7), (5,11), (7,11), (5,8)]과 같으면 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- inputArr 목록 정렬
- inputArr의 크기에서 범위 1에 있는 i에 대해
- inputArr[i - 1].time2> inputArr[i].time1이면
- 참 반환
- 거짓을 반환
- inputArr[i - 1].time2> inputArr[i].time1이면
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h> using namespace std; class IntervalClass { public: int time1, time2; }; bool compare(IntervalClass inst1, IntervalClass inst2){ return (inst1.time1 < inst2.time1) ? true : false; } bool solve(vector<IntervalClass> &inputArr){ int size = inputArr.size(); sort(inputArr.begin(), inputArr.end(), compare); for (int i = 1; i < size; i++) if (inputArr[i - 1].time2 > inputArr[i].time1) return true; return false; } int main(){ vector<IntervalClass> inputArr = {{4,7},{5,11},{7,11},{5,8}}; int size = sizeof(inputArr) / sizeof(inputArr[0]); cout << solve(inputArr); }
입력
{{4,7},{5,11},{7,11},{5,8}}
출력
1