볼록 껍질의 표면적

시간 제한1초메모리 제한128 MB

요약
3차원 공간의 점을 최대 25개 주어질 때, 삼각형 면으로 이루어진 볼록 껍질의 겉넓이를 구해 반올림한 정수를 출력한다.
난이도

보통10점 중 7점

유형
기하, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

어떤 3차원 도형이 볼록(convex)하다는 것은, 도형 내부의 임의의 두 점을 잇는 선분이 항상 그 도형 안에 완전히 포함된다는 뜻이다. 3차원 공간의 점 집합 XX에 대해, XX의 볼록 껍질(convex hull)은 XX의 모든 점을 포함하는 가장 작은 볼록 도형이다.

예를 들어 X={(0,0,0), (10,0,0), (0,10,0), (0,0,10)}X = \{(0,0,0),\ (10,0,0),\ (0,10,0),\ (0,0,10)\}이라고 하자. XX의 볼록 껍질은 XX의 네 점을 꼭짓점으로 하는 사면체이다. 이 사면체는 점 (1,1,1)(1,1,1)을 포함하므로, (1,1,1)(1,1,1)을 XX에 추가해도 볼록 껍질은 변하지 않는다.

XX가 주어질 때, 그 볼록 껍질의 표면적을 구하여 가장 가까운 정수로 반올림한 값을 구하라.

참고: 볼록 껍질의 모든 면은 다각형이다. 이 문제에서는 볼록 껍질의 한 면 위에 놓이는 XX의 점이 최대 33개라고 가정해도 된다(즉, 모든 면은 삼각형이다).

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 점의 개수를 나타내는 정수 nn (4≤n≤254 \le n \le 25)으로 시작한다. 이어지는 nn개의 줄에는 각각 한 점의 xx, yy, zz 좌표를 나타내는 정수 세 개가 주어진다. 모든 좌표는 −100≤x,y,z≤100-100 \le x, y, z \le 100을 만족한다.

입력의 끝은 n=0n = 0인 줄로 표시되며, 이 케이스는 처리하지 않는다.

출력

각 테스트 케이스마다 볼록 껍질의 표면적을 가장 가까운 정수로 반올림하여 한 줄에 출력한다(예: 2.4992.499는 22로, 2.52.5는 33으로 반올림된다).

힌트

반올림 오차로 인한 모호함을 피하기 위해, 모든 정답은 반올림 경계에서 최소 0.0010.001 이상 떨어지도록 테스트 데이터가 구성되어 있다(예를 들어 표면적이 정확히 2.49972.4997인 경우는 없다).

예제1

  1. 예제 1

    입력
    5
    0 0 0
    10 0 0
    0 10 0
    0 0 10
    1 1 1
    9
    0 0 0
    2 0 0
    2 2 0
    0 2 0
    1 1 2
    1 1 -2
    1 1 -1
    1 1 0
    1 1 1
    0
    
    예상 출력
    237
    18