BOJ 1428 다각형의 개수

BOJ 1428 다각형의 개수

문제 링크:

문제 내용

NN개의 직선이 주어집니다. 이 직선들이 이루는 유한한 영역의 개수를 구하시오.

입력

첫 줄에 NN이 주어집니다. (1≤N≤501 \le N \le 50)

다음 NN줄에 각각의 직선이 지나는 두 개의 점의 좌표가 x1x_1, y1y_1, x2x_2, y2y_2의 순서로 주어집니다. (−10  000≤x1,y1,x2,y2≤10  000-10\;000 \le x_1, y_1, x_2, y_2 \le 10\;000, 모두 정수)

같은 직선이 여러 개 주어지지 않으며, 한 직선이 지나는 두 개의 점의 좌표가 같은 경우도 주어지지 않습니다.

출력

문제의 정답을 출력합니다.

문제 풀이

스포일러

Euler characteristic을 이용하는 풀이가 가능합니다. 어떤 평면 그래프에서 정점의 개수를 vv, 간선의 개수를 ee, 영역의 개수를 ff라고 하면, v−e+f=1v - e + f = 1이 성립하며, 이는 무한히 뻗어나가는 간선이 있는 경우에도 성립합니다.

이제 각 직선의 교점을 구하여 vv와 ee를 구할 수 있습니다. 두 직선이 한 점에서 만날 경우 vv에 1을, ee에 2를 더해 줍니다. 그리고 그 점에서 다른 직선이 또 만날 경우, 직선 하나 당 ee에만 1을 더해 줍니다. 이때 같은 직선 쌍을 중복해 처리하지 않도록 합니다. 한 점에서 kk개의 직선이 만날 경우 k(k−1)2\frac{k(k-1)}{2}개의 쌍을 모두 방문 처리해야 합니다.

마지막으로, f=1−v+ef = 1 - v + e로 영역의 개수를 구합니다. 여기서 무한 영역의 개수를 빼야 하는데, 직선이 nn개이고 모두 평행하지 않을 경우 무한 영역은 2n2n개, 모두 평행이면 n+1n+1개임을 보일 수 있습니다.

Last updated on