https://www.codetree.ai/problems/three-at-dawn-and-four-at-dusk?utm_source=clipboard&utm_medium=text
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
위와 같은 업무가 주어졌을 때 아침과 저녁에 할 일의 분배가 최대한 비슷하게 만드는 문제이다.
나는 백트래킹을 이용한 브루트포스를 사용했다.
우선, 아침에 할 일과 저녁에 할 일을 묶는데 한번 사용하고, 아침과 저녁에 할 업무를 전부 더해서 값을 구하는데 한번 더 사용했다.
또한 거의 모든 배열은 사용하기 용이하게 하기 위해서 전역변수를 사용했다.
import java.util.*;
import java.io.*;
import java.math.*;
public class Main {
static int n;
static int[][] arr;
static int[] gr1;
static int[] gr2;
static int[] vis;
static int min = 1000000000; //fail뜨면 생각하기
static int[] two = new int[2];
//2개씩 순열구하기
static void two(int k, int num){
if(k ==2){
sum();
}
else{
for(int i = num;i<n/2;i++){
two[k] = i;
two(k+1, i+1);
}
}
}
static void sum(){
// System.out.printf("%d %d\n", gr1[two[0]], gr1[two[1]]);
sum1 += (arr[gr1[two[0]]][gr1[two[1]]] + arr[gr1[two[1]]][gr1[two[0]]]) ;
sum2 += (arr[gr2[two[0]]][gr2[two[1]]] + arr[gr2[two[1]]][gr2[two[0]]]) ;
}
static int sum1;
static int sum2;
//그룹에 있는 것들 노동 합 구하기
static void hap(){
sum1 = 0;
sum2 = 0;
int num = 0;
for(int i = 0;i<n;i++){
if(vis[i] == 0){
gr2[num] = i;
num++;
}
}
two(0,0);
//System.out.printf("%d %d\n", sum1,sum2);
min = Math.min(min, Math.abs(sum1-sum2));
}
//그룹만들기
static void make(int k, int num){
if(k == n/2){
hap();
}
else{
for(int i = num;i<n;i++){
vis[i] = 1;
gr1[k] = i;
make(k+1, i+1);
vis[i] = 0;
}
}
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
arr = new int[n][n];
StringTokenizer st;
for(int i =0 ;i<n;i++){
st = new StringTokenizer(br.readLine());
for(int j = 0;j<n;j++){
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
gr1 = new int[n/2];
gr2 = new int[n/2];
vis = new int[n];
make(0,0);
System.out.println(min);
}
}
'알고리즘 > 코드트리 문제풀이' 카테고리의 다른 글
코드트리 [자바 java] 동전 거슬러주기 (0) | 2023.08.13 |
---|---|
코드트리 [자바 java] 부분수열의 합이 m (0) | 2023.08.12 |
코드트리 [자바 java] 최소 경로로 탈출하기 (0) | 2023.08.10 |
코드트리 [자바 java] 정수 사각형 최대 합 (0) | 2023.08.08 |
코드트리 [자바 java] 피보나치 수 (0) | 2023.08.08 |