https://www.acmicpc.net/problem/1931
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main(int argc, char** argv) {
int n, a, b;
cin >> n;
vector<pair<int, int>> list;
for (int i = 0; i < n; i++)
{
cin >> b >> a;
list.push_back(make_pair(a, b));
}
sort(list.begin(), list.end());
int t = list[0].first;
int ans = 1;
int j = 0;
for (int i = 1; i <= n; i++)
{
if (list[i].second >= t)
{
ans++;
t = list[i].first;
}
}
cout << ans;
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
회의 시작을 아무리 빨리 시작하더라도 종료시간이 마지막 예시중 (1, 12) 이정도라면 한 회의밬에 진행하지못하므로 종료시간이 가장 빠른것을 찾아 넣어줘야한다.
시작시간보다 끝나는 시간에 맞춰 오름차순 정렬을 해준뒤 끝나는 시간이 가장 이른 회의부터 카운트 해준다. (리스트의 첫번째에 위치)
다음 회의는 그다음으로 빨리 끝나는 것중 시작시간이 처음 카운트해준 회의의 끝나는 시간보다 큰 회의를 골라줌.
처음 봤을때 한번에 못풀겠어서 다른 블로그를 참고해서 풀었다.. 벡터와 리스트의 사용법을 알게 되었다. 참고해서 다른 문제도 풀어보자.
'코딩테스트 > C++' 카테고리의 다른 글
[백준 C++] 9012번: 괄호 (2) | 2024.03.23 |
---|---|
[백준 C++] 9093번: 단어 뒤집기 (0) | 2024.03.23 |
[백준 C++] 10828번: 스택 (0) | 2024.03.22 |
[백준 C++] 11399번: ATM (0) | 2024.03.22 |
[백준 C++] 11047번: 동전 0 (0) | 2024.03.21 |