정올이는 사무직을 맡고 있는데, N 개의 회의들을 정렬하라는 지시를 받았다.
모든 회의는 시작 시간과 끝 시간, 두 개의 자연수로 표현된다.
예를 들어 3 10 회의는, 3시에 시작하여 10시에 끝나는 회의이다. ( 길이는 7시간일 것이다. )
정올이는 이 회의들을 정렬할 것인데,
1 순위 : 회의의 길이
2 순위 : 회의 시작 시간으로 오름차순 정렬하고 싶다.
즉, 길이가 가장 짧은 회의가 앞으로 오게 하고,
길이가 같은 회의들끼리는 먼저 시작하는 것을 앞으로 오게 할 것이다.
정올이를 도와 정렬 결과를 출력하자.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Meeting {
int len, start, id;
};
bool compare(const Meeting& a, const Meeting& b) {
if (a.len == b.len) {
return a.start < b.start;
}
return a.len < b.len;
}
int main() {
int n;
cin >> n;
vector<Meeting> v(n);
for (int i = 0; i < n; i++) {
int s, e;
cin >> s >> e;
v[i] = { e - s, s, i + 1 };
}
sort(v.begin(), v.end(), compare);
for (int i = 0; i < n; i++) {
cout << v[i].id << "\n";
}
return 0;
}
처음에 구조체를 이용하여 하나의 함수로 지정후 bool을 이용하여 구조체에 각각 1번 2번 내용을 가져와 만약 회의 시간이 갔다면 시작 시간이 빠른걸로 하고 그 외에는 회의 길이에 따라 정렬 시키도록 반환한다.
그후 main함수에서 처음에 회의에 계수를 입력 받고 그다음 for문을 이용하여 각각의 인덱스에 값을 저장하고 그다음 sort함수를 이용하여 정렬하는데 아까 위에서 지정해준 방법을 이용해서 정렬 시킨다. 그후 정렬 시킨 것을 for문을 이용하여 하나씩 출력 한다.
'알고리즘' 카테고리의 다른 글
| 피자데이 (0) | 2026.05.30 |
|---|---|
| 도서관(Library 2) (0) | 2026.05.30 |
| 회의실 배정 (0) | 2026.05.23 |
| 자료구조의 정의와 종류 (0) | 2026.05.22 |
| 큐 스택 (0) | 2026.05.22 |