BOJ 1931번: 회의실 배정

십학년·2025년 6월 25일

BOJ 문제 풀기 (C++)

목록 보기
10/38

문제 설명

회의의 수 N과 N개의 시작/끝나는 시간이 주어지면 할 수 있는 회의의 최대 수 구하기

🔗 문제 링크


핵심 아이디어

  • 끝나는 순 기준 → 시작 시간 기준으로 정렬하여, 현재 있는 시간 다음에 올 수 있는 회의를 고르기

코드

#include <bits/stdc++.h>
using namespace std;
int n, a, b;
vector<pair<int,int>> v;
int ans = 0;
int t;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    cin >> n;
    
    for(int i = 0; i < n; i++){
        cin >> a >> b;
        v.push_back({b,a}); // 종료 시간, 시작 시간
    }
    
    sort(v.begin(), v.end());
    
    for(int i = 0; i < n; i++){
        if (t <= v[i].second){
            ans++;
            t = v[i].first;
        }
    }
    
    cout << ans;
}

놓친 부분

  • pair를 (시작시간, 끝난 시간)이 아니라 (끝난 시간, 시작시간)으로 저장한다면 바로 원하는 기준으로 정렬 가능

👉 pair를 sort로 정렬하게 된다면?

  1. 먼저 first 기준으로 오름차순 정렬
  2. first가 같으면 second 기준으로 오름차순 정렬
profile
감자입니다

0개의 댓글