본문 바로가기

ALGORITHM

백준 14889 스타트와 링크 (Java)

1. 문제 링크

 

14889번: 스타트와 링크

예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

팀을 N/2명으로 나누는 조합 과정을 거친다.

뽑힌 사람은 T1, 안 뽑힌 사람을 T2 배열로 나눠서 넣는다.

각 팀원끼리의 능력치를 전부 더하고, 차이가 최소가 되는 값을 출력한다.

 

SWEA의 요리사 문제와 유사하다.

 

4. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
	static int N, human[][], numbers[], result, first;
    public static void main(String[] args) throws IOException{
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       StringBuilder sb = new StringBuilder();
       
       N = Integer.parseInt(br.readLine());
       human = new int[N][N];
       numbers = new int[N/2];
       for(int i=0;i<N;i++) {
    	   String[] split = br.readLine().split(" ");
    	   for(int j=0;j<N;j++) {
    		   human[i][j] = Integer.parseInt(split[j]);
    	   }
       }
       
       //조합
       result = Integer.MAX_VALUE;
       Combination(0, 0);
       
       
       System.out.println(result);
	}

	private static void Combination(int cnt, int start) {
		if(cnt == N/2) {
			int[] T1 = new int[N/2];
			int[] T2 = new int[N/2];
			int sum1 = 0, sum2 = 0;
			boolean[] visit = new boolean[N];
			
			for(int i=0;i<N/2;i++) {
				T1[i] = numbers[i];
				visit[numbers[i]] = true;
			}
			int idx = 0;
			for(int i=0;i<N;i++) {
				if(!visit[i]) {
					T2[idx++] = i;
				}
			}
			
			for(int i=0;i<N/2;i++) {
				for(int j=i; j<N/2; j++) {
					sum1+= human[T1[i]][T1[j]]+human[T1[j]][T1[i]];
					sum2+= human[T2[i]][T2[j]]+human[T2[j]][T2[i]];
				}
			}
			
			result = Math.min(result, Math.abs(sum1-sum2));
			return;
		}
		for(int i=start;i<N;i++) {
			numbers[cnt] = i;
			Combination(cnt+1, i+1);
		} 		
	}
}

 

'ALGORITHM' 카테고리의 다른 글

백준 2577 숫자의 개수 (Java)  (0) 2023.03.15
백준 2606 바이러스 (Java)  (1) 2023.03.15
백준 2559 수열 (Java)  (0) 2023.03.14
백준 4659 비밀번호 발음하기 (Java)  (0) 2023.03.13
백준 15686 치킨 배달 (Java)  (0) 2023.03.13