아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

단풍나무 리본 두르기

면접 대비

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

요약
최대 99개의 점이 주어질 때, 오른쪽으로 가장 작은 각도만큼 회전하며 이동해 볼록 껍질을 구하고 그 둘레를 소수점 둘째 자리까지 출력한다.
난이도

보통10점 중 6점

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

문제

엘마이라(Elmira) 지역의 한 메이플 시럽 생산자가 올해 캐나다 제과 경연 대회(CCC, Canadian Confectionery Competition)의 우승자로 선정되었다. 심사위원은 이 생산자의 단풍나무 숨(설탕단풍 군락) 둘레에 파란 리본을 두르려고 한다.

리본을 두르는 방법은 다음과 같다. 먼저 가장 북쪽에 있는 나무를 찾는다(가장 북쪽에 있는 나무가 여러 그루라면 그중 아무거나 한 그루를 고른다). 그 나무의 위치에 서서 정동쪽(동쪽)을 바라본다. 그런 다음 다른 나무가 정면에 보일 때까지 오른쪽으로 몸을 돌린 뒤, 그 나무까지 직선으로 걸어가며 거리를 잴다. 도착하면 다시 어떤 나무가 정면에 보일 때까지 오른쪽으로 돌아 그 나무로 걸어간다. 매 단계에서 오른쪽으로 돌는 각도가 가장 작은 나무를 선택하며, 처음 출발한 나무로 되돌아올 때까지 이 과정을 반복한다.

이렇게 이동한 총 거리가 필요한 리본의 길이다. 이 과정에서 리본은 모든 나무를 감싸는 바깥 둘레를 그리게 된다. 주어진 나무들에 대해 필요한 리본의 길이를 구하라.

입력

첫 번째 줄에는 데이터 집합의 개수인 정수 mm이 주어진다. 각 데이터 집합의 첫 줄에는 숨에 있는 나무의 수를 나타내는 정수 nn(1<n<1001 < n < 100)이 주어지고, 이어서 nn개의 줄이 주어진다. 각 줄에는 한 나무의 위치를 나타내는 두 정수 xx와 yy가 순서쌍으로 주어진다. yy축은 북쪽을, xx축은 동쪽을 가리킨다.

출력

각 데이터 집합마다 모든 나무를 감싸는 리본의 길이를 소수점 아래 둘째 자리까지 반올림하여 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    2
    3
    -1 1
    1 1
    1 -1
    5
    1 0
    2 2
    2 3
    3 1
    -1 2
    
    예상 출력
    6.83
    10.46