Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[SW Expert Academy] 6808. 규영이와 인영이의 카드게임 본문

SW_Expert

[SW Expert Academy] 6808. 규영이와 인영이의 카드게임

코드와이 2021. 2. 3. 23:33

 

문제링크

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWgv9va6HnkDFAW0

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

package D3;

import java.util.Scanner;

public class 규영이와_인영이의_카드게임 {
     
    static int MAX_SCORE = 19 * 9;
    static int ans;
    static int[] arr;
    static int[] brr;
     
    public static void main(String[] args){
 
        Scanner sc = new Scanner(System.in);
         
        int T = sc.nextInt();
        StringBuilder sb = new StringBuilder("");
         
        for (int tc = 1; tc <= T; tc++) {
             
            ans = 0;
            sb.append("#" + tc + " ");
             
            boolean[] b = new boolean[18];
            arr = new int[9];
            brr = new int[9];
            boolean[] visit = new boolean[9];
             
            for(int i = 0 ; i < 9 ; i++) {
                arr[i] = sc.nextInt();
                b[arr[i]-1] = true;
            }
 
            int idx = 0;
            for(int i = 1 ; i < 19 ; i++) {
                if(!b[i-1]) {
                    brr[idx++] = i;
                }
            }
             
            func(visit,0,0,0);
             
            sb.append(ans + " " + (9*8*7*6*5*4*3*2 - ans));
            System.out.println(sb);
            sb.setLength(0);
        }
         
        sc.close();
         
    }
    public static void func(boolean[] f, int arr_idx, int win, int lose) {
        if (MAX_SCORE / 2 < win) {
            int a = 1;
            for(int i = 9 - arr_idx ; i >= 1 ; i--) {
                a *= i;
            }
            ans += a;
            return;
        }
        if (MAX_SCORE / 2 < lose) return;
         
        for (int i = 0 ; i < 9 ; i++) {
            if (!f[i]) {
                f[i] = true;
                if( arr[arr_idx] > brr[i]) func(f, arr_idx + 1, win + arr[arr_idx] + brr[i], lose);
                else func(f, arr_idx + 1, win, lose + arr[arr_idx] + brr[i]);
                f[i] = false;
            }
        }
         
    }
}