짝맞추기

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

public class Couple { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int T = scan.nextInt;// 테스트 케이스의 개수(1 <= T <= 50) for(int i = 0; i < T; i++) { int N = scan.nextInt;// 단체 미팅에 등록한 남녀 회원의 수(1 <= N <= 10,000) int[] men = new int[N];// 남성 회원의 수치 for(int j = 0; j < N; j++) { men[j] = scan.nextInt; } int[] women = new int[N];// 여성 회원의 수치 for(int j = 0; j < N; j++) { women[j] = scan.nextInt; } // 짝을 짓는 남녀간의 수치의 차이의 합의 최소값을 출력한다. System.out.println(couple(N, men, women)); } } /** public static int couple(int length, int[] men, int[] women) { // 탈출 조건을 설정한다. if(length == 0) { return 0; } int min = Integer.MAX_VALUE; for(int i = 0; i < length; i++) { // 첫번째 남성 회원을 제외한다. int[] men2 = Arrays.copyOfRange(men, 1, length); // 선택된 여성 회원을 제외한다. int[] women2 = new int[length - 1]; int count = 0; for(int j = 0; j < length; j++) { if(j == i) continue; women2[count++] = women[j]; } // 재귀적으로 짝을 맺어 최소값을 구한다. int dif = Math.abs(men[0] - women[i]) + couple(length - 1, men2, women2); if(dif < min) { min = dif; } } return min; } } code
 * 한 짝씩 제외하며 재귀적으로 계산한다.
 * @param length 남녀 회원의 수
 * @param men 남성 회원의 수치
 * @param women 여성 회원의 수치
 * @return 짝을 짓는 남녀간의 수치의 차이의 합의 최소값

Comment 재귀를 이용해서 풀었다. 다음번엔 가지치기를 이용해 풀어볼 생각이다.