반응형
https://www.acmicpc.net/problem/14889
14889번: 스타트와 링크
예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.
www.acmicpc.net
import java.io.*;
import java.util.*;
public class Main {
static int team[][];
static boolean[]visit;
static int N,min=Integer.MAX_VALUE;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
team= new int[N][N];
visit=new boolean[N];
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
team[i][j]=sc.nextInt();
}
}
bt(0,0);
System.out.println(min);
}// main()
static void bt(int a,int depth) { //팀을 골라줌
if(depth==N/2) {
cal();
return;
}
for(int i=a;i<N;i++) {
if(!visit[i]) {
visit[i]=true;
bt(i+1,depth+1);
visit[i]=false;
}
}
}
static void cal() { //골라준 팀을 기준으로 틍력치를 더해서 비교
int aP=0,bP=0;
//System.out.println(Arrays.toString(tA)+Arrays.toString(tB));
for(int i=0;i<N-1;i++) {
for(int j=i+1;j<N;j++) {
if(visit[i]==true&&visit[j]==true) {
aP+=(team[i][j]+team[j][i]);
}else if(visit[i]==false&&visit[j]==false){
bP+=(team[i][j]+team[j][i]);
}
}
}
int gap = Math.abs(aP-bP); //각 팀의 능력치 차이 절댓값
min=Math.min(gap, min); //최솟값을 비교 저장
}//cal()
}// class Main
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
백준 1927 : 최소 힙 _자바 Java (0) | 2023.01.26 |
---|---|
백준 10699 : 오늘 날짜 _자바 Java (1) | 2023.01.25 |
백준 1654 : 랜선 자르기 _자바 Java (0) | 2023.01.25 |
백준 9020 : 골드바흐의 추측 _자바 Java (0) | 2023.01.24 |
백준 1541 : 잃어버린 괄호 _자바 Java (0) | 2023.01.23 |
댓글