Vito's+Family

= UVa ID: 10041 - 비토와 친척들(Vito's Family) = 유명한 갱스터인 비토 데드스톤(Vito Deadstone)이 뉴욕으로 이사를 간다. 뉴욕에는 그의 가족들이 매우 많이 살고 있는데 그들은 모두 라마피아 거리(Lamafia Avenue)에 살고 있다. 그는 그 친척들을 자주 만나러 갈 계획이기 때문에 친척들과 가까운 곳에 집을 구하기로 했다.

비토는 모든 친척집과의 거리 총합이 가장 작은 곳에 집을 구하고 싶어하는데, 하필이면 당신에게 그 문제를 해결하기 위한 프로그램을 만들어내라는 협박 편지를 보내왔다.

입력
입력은 여러 개의 테스트 케이스로 구성된다. 첫번째 줄에는 테스트 케이스의 개수가 들어있다. 각 테스트 케이스마다 친척집의 수를 나타내는 정수 r (0<r<500)과 각 친척집의 번지수를 나타내는 정수 s1, s2, ..., si, ... sr (0<si<30,000)이 입력된다. 친척 중에는 같은 번지에 살고 있는 사람들도 있다는 점에 주의하자.

출력
각 테스트 케이스에 대해 비토가 원하는 위치에 집을 구했을 경우에 그 집으로부터 각 친척집까지의 거리의 총합을 출력해야 한다. 번지 수가 si와 sj인 두 집 사이의 거리는 dij=|si-sj|로 구한다.

입력 예
2

2 2 4

3 2 4 6

출력 예
2

4

출처
[]

Source Code code format="java5" import java.util.Arrays; import java.util.Scanner;

public class Vito { public static void main(String[] args) { Scanner scan = new Scanner(System.in);

int r = scan.nextInt;   // 테스트 케이스의 개수

int[] s = new int[r]; for(int i = 0; i < r; i++) { s[i] = scan.nextInt;   // 각 친척집의 번지 수

process(s); }   }

public static void process(int[] houses) { // 오름차순으로 정렬 Arrays.sort(houses);

// 정렬된 집주소들 for(int i : houses) { System.out.print(i + " "); }       System.out.println;

// 비토의 집 위치 int middleNum = houses.length / 2;

// 거리의 총합 int sum = 0;

// 젤 뒷 집에서 비토의 집과의 거리 sum += houses[middleNum] - houses[0]; // 젤 앞 집에서 비토의 집과의 거리 sum += houses[houses.length - 1] - houses[middleNum];

// 총합을 구한다. System.out.println(sum); } } code

Comment 정렬 문제이다. 키 포인트는 비토의 집을 놓는 위치는 평균값이 아니라 중간값이라는 것이다.