-
JUNGOL 알고리즘 1370 : 회의실 배정보관함 2018. 12. 14. 12:13
회의실이 하나 있다. 여러 회의들이 시작시간과 종료시간이 예약되어 있으며, 시간대가 겹치는 회의는 동시에 개최가 불가능하다. 따라서 같은 시간대에 속하는 회의들 중 하나만 개최하고 나머지 회의들은 버려야한다.
단, 종료시간과 시작시간이 같은 경우에는 시간이 겹친다고 말하지 않는다. 회의의 개수 N과 각 회의의 시작시간, 종료시간이 주어졌을 때 되도록 많은 회의를 개최하고자 한다.회의를 최대한 많이 배정하는 프로그램을 작성하시오.
6 1 1 10 2 5 6 3 13 15 4 14 17 5 8 14 6 3 12
3 2 5 4
시간이 겹치지 않도록 회의실을 배정하고 그 배정하는 숫자가 가장 크게 되는 배정 방법을 찾는 문제인 것으로 보입니다.
문제 힌트에서는 그리디를 사용하라고 되어있는데, 그리디는 개념상 현재 선택할 수 있는 것 중 가장 최적인 것을 선택하여 진행하는 방법으로 알고 있습니다.
그러므로 시작위치를 입력의 처음부터 끝까지로 바꾸면서 각 시작 위치에서 다음에 예약할 수 있는 시간이 이전 회의가 끝나는 시간과 가장 가까운 것을 선택하도록 하고 이 과정을 반복해 가장 많은 회의실을 배정할 수 있는 것을 선택하여 출력하면 된다고 가정했습니다.
그런데 실행 시간은 조건을 만족했으나 10문제 중 2문제만 통과했습니다. 알고리즘에서 적절한 시간을 선택하지 못한 것 같습니다.
실패 결과를 살펴보니 단순히 시작 시간이 이전 회의의 끝 시간과 가깝다고 최적을 찾지는 못하고 있습니다.
추가적으로 회의가 끝나는 시간 또한 고려해야 할 것 같습니다.
회의의 지속 시간을 비교하기 위해 시간을 비교하는 것이 아닌 비교가 가능하도록 값을 만들어 내도록 하겠습니다.
이전 회의의 끝나는 시간과 비교할 회의의 시작시간의 차, 비교할 회의의 끝나는 시간과 시작시간의 차(지속 시간) 이 두 값의 합으로 비교하면 될 것 같습니다. 추가적으로 최초의 값을 따로 처리하지 않고 같은 알고리즘 내에서 처리되게 하겠습니다.