4
4
import java .io .BufferedReader ;
5
5
import java .io .IOException ;
6
6
import java .io .InputStreamReader ;
7
+ import java .util .StringTokenizer ;
7
8
8
9
public class _14889 {
10
+ public static int N ; // 주어진 숫자 개수
11
+ public static int [][] skill ; // 능력치
12
+ static boolean [] visit ;
13
+ static int Min = Integer .MAX_VALUE ;
14
+
9
15
public static void main (String [] args ) throws IOException {
10
16
BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
11
- // memory runtime
17
+ // memory 15696 runtime 324
18
+ N = Integer .parseInt (br .readLine ());
19
+ skill = new int [N ][N ];
20
+ visit = new boolean [N ];
21
+
22
+ // 숫자들 배열에 넣기
23
+ for (int i = 0 ; i < N ; i ++) {
24
+ StringTokenizer st = new StringTokenizer (br .readLine (), " " );
25
+ for (int j =0 ; j <N ; j ++){
26
+ skill [i ][j ] = Integer .parseInt (st .nextToken ());
27
+ }
28
+ }
29
+ combination (0 , 0 );
30
+ System .out .println (Min );
31
+ }
32
+
33
+ static void combination (int idx , int cnt ){
34
+ // 팀 조합이 완성된 경우
35
+ if (cnt == N /2 ){
36
+ diff ();
37
+ return ;
38
+ }
39
+
40
+ for (int i =idx ; i <N ; i ++){
41
+ // 방문하지않은 경우
42
+ if (!visit [i ]){
43
+ visit [i ] = true ;
44
+ combination (i +1 , cnt +1 ); // 재귀
45
+ visit [i ] = false ;
46
+ }
47
+ }
48
+ }
49
+ // 두 팀의 능력치 차이를 계산하는 함수
50
+ static void diff (){
51
+ int team_start = 0 ;
52
+ int team_link = 0 ;
53
+
54
+ for (int i =0 ; i <N -1 ; i ++){
55
+ for (int j =i +1 ; j <N ; j ++){
56
+ if (visit [i ] == true && visit [j ] == true ){
57
+ team_start += skill [i ][j ];
58
+ team_start += skill [j ][i ];
59
+ }
60
+ // i 번째 사람과 j 번째 사람이 false라면 링크팀으로 점수 플러스
61
+ else if (visit [i ] == false && visit [j ] == false ) {
62
+ team_link += skill [i ][j ];
63
+ team_link += skill [j ][i ];
64
+ }
65
+ }
66
+ }
67
+ // 두 팀의 점수 차이 (절댓값)
68
+ int val = Math .abs (team_start - team_link );
69
+
70
+ // 두 팀의 차이가 0이라면 가낭 낮은 최솟값이기때문에 종료
71
+ if (val == 0 ) {
72
+ System .out .println (val );
73
+ System .exit (0 );
74
+ }
75
+ Min = Math .min (val , Min );
12
76
}
13
77
}
78
+ /*
79
+ input
80
+ 6
81
+ 0 1 2 3 4 5
82
+ 1 0 2 3 4 5
83
+ 1 2 0 3 4 5
84
+ 1 2 3 0 4 5
85
+ 1 2 3 4 0 5
86
+ 1 2 3 4 5 0
87
+
88
+ output
89
+ 2
90
+ */
0 commit comments