반응형

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

 

1689번: 겹치는 선분

첫째 줄에는 선분의 개수(1 ≤ N ≤ 1,000,000)가 입력으로 들어온다. 그 다음 N개의 줄에 선분의 시작 좌표 s와 끝나는 좌표 e (s < e)가 입력으로 들어온다. 선분의 좌표는 절댓값이 10억보다 작거나

www.acmicpc.net

 

선분에 진입할 때는 1을 더해줍니다.

선분에서 빠져나올 때는 1을 빼줍니다.

각 좌표 순으로 오름차순으로 정렬해서, 겹치는 선분의 개수를 구해주었습니다.

 

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

vector<pair<int, int>> lines;

int n, a, b, ans = 0;

bool comp(pair<int, int>& a, pair<int, int>& b) {
	if (a.first == b.first) return a.second < b.second;
	else return a.first < b.first;
}

int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &a, &b);
		lines.push_back({ a, 1 });
		lines.push_back({ b, -1 });
	}
	sort(lines.begin(), lines.end(), comp);
	int cnt = 0;
	for (int i = 0; i < lines.size(); i++) {
		cnt += lines[i].second;
		ans = max(cnt, ans);
	}
	printf("%d", ans);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 17940 : 지하철  (0) 2021.11.17
백준 5549 : 행성 탐사  (0) 2021.11.17
백준 2352 : 반도체 설계  (0) 2021.11.17
백준 9470 : Strahler 순서  (0) 2021.11.17
백준 15922 : 아우으 우아으이야!!  (0) 2021.11.17

+ Recent posts