회의실 배정

코드

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

// sort 함수에서 비교할 때 사용하라고 던져주는 함수입니다.
// C++ sort 정렬기준 바꾸기 이런 식으로 검색하면 나와요.
bool compare(const pair<int, int> &a, const pair<int, int> &b) {
    // a보다 b를 뒤로 정렬하면 true 반환 / 같으면 무조건 false 반환하세요!
    // (정렬의 안전성: 같은 수일 때 순서 변하는 문제와 관련있을 거예요.)
    
    if (a.second < b.second) {
        return true;
    } else if (a.second > b.second) {
        return false;
    } else { // a.second == b.second
        return (a.first < b.first);
    }    
}

int N, s, e;
vector<pair<int, int>> meetings;
int lastEndTime = 0, answer = 0;

int main()
{
    cin >> N;
    // 회의의 시작과 끝 시간을 배열에 입력받는다.
    for (int n = 0; n < N; n++) {
        cin >> s >> e;
        meetings.push_back({ s, e });
    }
    
    // 회의 끝 시간이 빠른 순서대로 정렬한다.
    // (경험상 그리디 문제는 정렬로 푸는게 많았던 거 같아요.)
    // 새로운 기준으로 정렬하는 거는  "본인의 언어 정렬 함수 + 기준 바꾸기"로 검색하시면 나와요.
    sort(meetings.begin(), meetings.end(), compare);
    
    // lastEndTime을 업데이트하면서, 현재 회의를 배정할 수 있으면 answer++
    for (int i = 0; i < meetings.size(); i++) {
        if (lastEndTime <= meetings[i].first) {
            lastEndTime = meetings[i].second;
            answer++;
        }
    }
    
    cout << answer << '\n';
    return 0;
}

결과

결과메모리시간
맞았습니다!!3572 KB96 ms