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

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

지그재그

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

요약
좌표가 작은 최대 10개의 점이 주어질 때, 각 선분이 점 두 개 이상을 지나며 모든 점을 덮는 꺾인 선을 꺾이는 점 수가 최소가 되도록 찾고, 그 중 길이가 최소인 값을 구합니다.
난이도

보통10점 중 7점

유형
조합론, 기하, 완전 탐색, 백트래킹
정답자
아직 제출이 없습니다

문제

평면 위에 여러 개의 점이 주어진다. 이 점들을 모두 지나는 지그재그 선을 찾으려고 한다.

지그재그 선은 여러 개의 선분이 끝점에서 차례로 이어져 만들어지는 꺾은선(폴리라인)이다. 지그재그 선은 다음 규칙을 만족해야 한다.

  • 지그재그 선의 각 선분은 주어진 점을 두 개 이상 지나야 한다.
  • 주어진 모든 점은 지그재그 선 위에 놓여야 한다. 즉, 각 점은 적어도 하나의 선분 위에 있어야 한다.

선이 꺾이는 지점을 전환점(turning point) 이라고 한다. 전환점은 주어진 점 위에 있을 수도 있고, 아닐 수도 있다. 선분이 ss개인 지그재그 선의 전환점은 s−1s - 1개이다.

우리는 다음 두 조건을 이 우선순위대로 만족하는 지그재그 선을 찾는다.

  1. 전환점의 개수가 가장 적어야 한다.
  2. 전환점의 개수가 같다면, 지그재그 선의 전체 길이가 가장 짧아야 한다.

각 선분의 길이는 두 끝점 사이의 유클리드 거리이며, 지그재그 선의 길이는 모든 선분 길이의 합이다. 모든 선분이 점을 두 개 이상 지나야 하므로, 때로는 더 긴 선이 정답이 되기도 한다.

점들이 주어졌을 때, 이러한 지그재그 선의 전환점 개수와 길이를 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스의 첫째 줄에는 점의 개수 nn이 주어진다. 이어지는 nn개의 줄에는 각 점의 좌표 xx와 yy가 공백으로 구분되어 주어진다.

모든 좌표는 음이 아닌 정수이다. nn은 2≤n≤102 \le n \le 10을 만족하는 자연수이고, xx와 yy는 0≤x,y≤100 \le x, y \le 10인 정수이다. 점의 입력 순서는 의미가 없으며, 주어지는 점은 모두 서로 다르다.

입력의 마지막 줄에는 00이 주어지며, 이는 입력의 끝을 의미한다.

출력

각 테스트 케이스마다 한 줄에, 가장 적은 전환점을 가지면서 그중 가장 짧은 지그재그 선의 전환점의 개수와 길이를 공백으로 구분하여 출력한다.

전환점의 개수는 정수로 출력하고, 길이는 소수점 아래 여섯 자리까지 반올림하여 출력한다.

가장 적은 전환점의 개수는 최대 44개이며, 따라서 선분의 개수는 최대 55개이다.

예제1

  1. 예제 1

    입력
    2
    0 0
    10 9
    4
    0 0
    3 1
    0 3
    3 3
    10
    2 2
    4 2
    6 2
    2 4
    4 4
    6 4
    2 6
    4 6
    6 6
    3 3
    10
    0 0
    2 0
    4 0
    0 2
    2 2
    4 2
    0 4
    2 4
    4 4
    6 8
    9
    0 0
    1 0
    3 0
    0 1
    1 1
    3 1
    0 2
    1 2
    2 2
    10
    0 0
    1 0
    0 1
    1 1
    9 9
    9 10
    10 9
    10 10
    0 2
    10 8
    10
    0 0
    0 10
    2 0
    2 1
    2 7
    2 10
    5 1
    6 7
    9 2
    10 9
    0
    
    예상 출력
    0 13.453624
    1 18.486833
    3 24.142136
    4 24.948137
    3 12.242641
    3 60.782896
    3 502.780435