https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeUtVakTMDFAVH
접근 방식
-> 조합을 써서 A팀의 재료를 뽑아준다.
이때 배열의 타입은 boolean, 크기는 N
그리고 해당 배열 중에 값이 false라면 A팀의 재료로 선택되지 않았기에
B팀의 재료에 해당한다.
그래서 각팀의 음식맛을 구할 때
이중 for문을 돌려서
check의 값이 true라면 A팀의 재료이므로
teamA라는 변수에 더해주고
반대로 check의 값이 false라면 B팀의 재료이므로
teamB라는 변수에 더해준다.
시행 착오
- 2중 for문을 사용해서 하는 건 비효율적이라고 생각해서
좀 더 효율적으로 풀 수 있는 방식에 대해 생각해봤다.
하지만, 떠오르지 않았다..
좀 더 생각해봐야할 문제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | package d0812; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Solution_4012_7조 { static int[][] array; static int N; static boolean[] check; // A팀 식재료 static int answer; static int teamA; static int teamB; public static void comb(int cnt, int start) { if(cnt==N/2) { teamA=0; teamB=0; for (int i = 0; i < N; i++) { if(check[i]) { // A팀 for (int j = 0; j < N; j++) { if(check[j]) { teamA+=array[i][j]; // A팀 음식 맛 } } }else { // B팀 for (int j = 0; j < N; j++) { if(!check[j]) { teamB+=array[i][j]; // B팀 음식 맛 } } } } // A 음식과 B 음식의 맛의 차이가 최소가 되는 값 찾기 answer=Math.min(answer, Math.abs(teamA-teamB)); return; } for (int i = start; i < N; i++) { check[i]=true; comb(cnt+1, i+1); // A팀 식재료 선택 check[i]=false; } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T= Integer.parseInt(br.readLine()); for (int t = 1; t <= T; t++) { N= Integer.parseInt(br.readLine()); array=new int[N][N]; answer=Integer.MAX_VALUE; for (int i = 0; i < N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for (int j = 0; j < N; j++) { array[i][j]=Integer.parseInt(st.nextToken()); } } check=new boolean[N]; comb(0,0); System.out.println("#"+ t +" " + answer); } } } | cs |
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[17471] 게리맨더링 in Java (0) | 2022.08.14 |
---|---|
[17281]⚾ in Java (0) | 2022.08.12 |
[*11286*] 절댓값 힙 in Java (0) | 2022.08.12 |
[15686] 치킨 배달 in Java (0) | 2022.08.12 |
[3040] 백설 공주와 일곱 난쟁이 in Java (0) | 2022.08.11 |