๐Ÿ“ Coding Test Study/Algorithm Problem

[C++][BOJ] 1931 ํšŒ์˜์‹ค ๋ฐฐ์ • :: ๋ผ์ธ ์Šค์œ„ํ•‘

ibelieveinme 2024. 5. 15. 19:09
728x90

๊ตฌ๊ฐ„์ด ๋‚˜์˜ค๋ฉด ์ •๋ ฌ!์„ ๋– ์˜ฌ๋ฆฌ์ž. ์–ด๋Š์ •๋„์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

[๋ฌธ์ œ]

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

 

๊ฐ ํšŒ์˜์— ๋Œ€ํ•ด ์‹œ์ž‘์‹œ๊ฐ„๊ณผ ๋๋‚˜๋Š” ์‹œ๊ฐ„์ด ์ฃผ์–ด์ ธ ์žˆ์„ ๋•Œ,

๊ฐ ํšŒ์˜๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ํ•˜๋ฉด์„œ ํšŒ์˜์‹ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํšŒ์˜์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์ž.

 

ํšŒ์˜์˜ ์ˆ˜ N(1 ≤ N ≤ 100,000)

์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ๋๋‚˜๋Š” ์‹œ๊ฐ„์€ 2^31-1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0

 

[ํ•ด๊ฒฐ๋ฐฉ๋ฒ•]

ํšŒ์˜์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 100,000 ๊ฐœ ์ด๋ฏ€๋กœ ์™„์ „ํƒ์ƒ‰์œผ๋กœ๋Š” ํ’€ ์ˆ˜ ์—†๋‹ค. Greedy ๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค.

ํŠนํžˆ, ๊ตฌ๊ฐ„์ด ์ฃผ์–ด์ง€๋ฉด ์ •๋ ฌ์„ ์ƒ๊ฐํ•˜์ž. ๋ผ์ธ์Šค์œ„ํ•‘ ๋ฌธ์ œ๋ผ ๋ถ€๋ฅธ๋‹ค.

 

1) ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ

2) ๋๋‚˜๋Š” ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ

3) ํšŒ์˜ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ

 

์œ„ 3๊ฐ€์ง€ ์ฒ˜๋Ÿผ ๋ชจ๋“  ํ’€์ด๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜๋ฉฐ ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผ ํ• ์ง€๋ฅผ ๊ณ ๋ฏผํ•ด๋ณด์ž.

 

๊ทธ๋ฆผ์— 2๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ๊ทธ๋ ค์ ธ ์žˆ๋Š”๋ฐ, ์œ— ๋ถ€๋ถ„์€ start, end ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์„ ํƒํ•œ ๊ฒฝ์šฐ๋‹ค.

start ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉด 2๊ฐœ๋ฐ–์— ์„ ํƒ์ด ์•ˆ๋˜๋Š”๋ฐ, end ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉด 3๊ฐœ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋‹ค. size๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด๋„ 3๊ฐœ ์„ ํƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์•„๋ž˜ ๋ถ€๋ถ„์€ size๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ–ˆ์„ ๋•Œ์˜ ๋ฐ˜๋ก€์ด๋‹ค. size ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉด 1๊ฐœ ๋ฐ–์— ์„ ํƒ์ด ์•ˆ๋œ๋‹ค. end ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•ด์•ผ 2๊ฐœ๊ฐ€ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ฆ‰, ํšŒ์˜์‹ค ๋ฐฐ์ •๋ฌธ์ œ๋Š” end ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์„ ํƒํ•ด์•ผ ์ •ํ™•ํ•œ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ •๋ ฌ์€ custome sort ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ start ์‹œ๊ฐ„๊ณผ end ์‹œ๊ฐ„ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์„œ vector pair ์— ์ €์žฅํ•˜์—ฌ sort ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

* ์ตœ์ข…๊ฒฐ๋ก : end ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์ด์ „ ํšŒ์˜๊ฐ€ ๋๋‚˜๋Š” ์‹œ๊ฐ„ ์ดํ›„์— ์‹œ์ž‘ํ•˜๋Š” ํšŒ์˜๋งŒ ์„ ํƒํ•˜์—ฌ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜์ž. 

 

 

[๋ฐ˜๋ก€]

3
0 0
0 0
0 0
---
3

3
4 4
3 4
2 4
---
2

 

 

[์ฝ”๋“œ]

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

// Custom Sort ํ•จ์ˆ˜
bool SortPairSecond(const pair<int, int>& left, const pair<int, int>& right) {
	if (left.second == right.second) {
		return left.first < right.first;
	}
	return left.second < right.second;
}

int main() {
	int meetingNum, startNum, endNum, count = 0;
	vector<pair<int, int>> meetings; // startTime, endTime

	cin >> meetingNum;
	for (int i = 0; i < meetingNum; i++) {
		cin >> startNum >> endNum;
		meetings.push_back({ startNum, endNum });
	}
	sort(meetings.begin(), meetings.end(), SortPairSecond);

	// ์‹œ์ž‘๊ฐ’ ์ผ๋‹จ ๋„ฃ๊ณ  ๋น„๊ต ์‹œ์ž‘
	int meetingEndTime = meetings[0].second;
	count++;

	for (int i = 1; i < meetings.size(); i++) { 
		if (meetings[i].first >= meetingEndTime) { // ์ด์ „ ํšŒ์˜๊ฐ€ ๋๋‚˜๋Š” ์‹œ๊ฐ„ ์ดํ›„์— ์‹œ์ž‘ํ•˜๋Š” ํšŒ์˜๋งŒ ๊ฐ€๋Šฅํ•จ
			meetingEndTime = meetings[i].second;
			count++;
		}
	}
	cout << count << "\n";

	return 0;
}

 

 

728x90