본문 바로가기
Algorithm/BOJ

[BOJ]1931번: 회의실배정 (c++)

by HBGB 2020. 6. 20.

https://www.acmicpc.net/problem/1931

 

1931번: 회의실배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

 

그리디

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct conf {
	int start, end;
};

bool compare(conf a, conf b) {
	if (a.end != b.end)
	{
		return a.end < b.end;
	}
	return a.start < b.start;
}

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	// 입력
	int N;
	cin >> N;
	vector<conf> confs(N);
	for (int i = 0; i < N; ++i)
	{
		cin >> confs[i].start >> confs[i].end;
	}

	// end가 빠른 순, start가 빠른 순으로 confs벡터 정렬
	sort(confs.begin(), confs.end(), compare);

	int now = 0, cnt = 0;
	for (int i = 0; i < confs.size(); ++i)
	{
		// 현재 <= 회의 start 시각일 때 
		// : 현재시각을 회의 끝시각으로 바꾸고 카운팅
		if (now <= confs[i].start)
		{
			now = confs[i].end;
			++cnt;
		}
	}

	cout << cnt;

	return 0;
}

 

 

냅색 문제 유형이라 다음의 두 과정을 구현하면 된다.

 

1. 회의 목록을 빨리 끝나는 순으로, 그리고 빨리 시작하는 순으로 정렬하기

2. 현재시각 이후의 가장 빠른 회의를 선택해나가기

 

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ]1080번: 행렬 (c++)  (0) 2020.06.20
[BOJ]11399번: ATM (c++)  (0) 2020.06.20
[BOJ] 11047번: 동전 0 (c++)  (0) 2020.06.17
[BOJ]14395번: 4연산 (c++)  (0) 2020.06.17
[BOJ]10026번: 적록색약 (c++)  (0) 2020.06.17

댓글