Problem : 겹치는 선분
유형 : 라인 스위핑
문제해석
- 겹치는 선분이 최대 몇개인지를 확인한다.
- 선분이 한개만 있으면 1개가 겹쳐있다고 생각한다.
해결전략
- 입력이 100만이므로, 라인스위핑을 통해서 O(N)으로 문제를 해결한다.
- 선분은 두개의 점으로 이루어져있으니, 시작점 빠른순으로 정렬한다. 만약 시작점과 끝점의 위치가 같다면 끝점을 먼저 계산한다. (끝점은 겹치지 않으므로)
구현
(시작점, 1)
(끝점, 0)
순으로 정렬한다. 끝점이 0인이유는 위치가 같은경우 끝점이 먼저 계산되어야 하기때문이다.- 시작점을 만남 == 현재 구간에서 선분이 추가됨 이므로 카운트업을하고, 겹치는 구간 최댓값을 갱신한다.
- 끝점을 만남 == 해당 구간에서 겹치는 선분이 끝남 이므로 현재까지 겹쳐있는 개수를 감소시킨다.
주의할점
- 선분이 한개만 있으면 1개가 겹쳐있다고 생각한다.
1 |
|
- 위의 경우 답은 1이다.
코드
cpp
1 |
|
java
1 |
|