선발 명단 3980

LJM·2023년 7월 25일
0

백준풀기

목록 보기
199/259

https://www.acmicpc.net/problem/3980

완탐을 할때 시간복잡도가 11! 아닌가 싶었는데 아니다
정확한 시간복잡도는 모르겠다..

오랜만에 힌트도 안보고 푼 문제라서 그리고 한번에 성공해서 굿!

import java.io.*;

public class Main {

    static int[][] player;
    static int answer = 0;

    static int[] lineup;

    static boolean[] visit;

    public static void main(String[] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int t = Integer.parseInt(br.readLine());

        String[] input;
        for (int i = 0; i < t; i++) {

            player = new int[11][11];

            for (int j = 0; j < 11; j++) {

                input = br.readLine().split(" ");
                for (int k = 0; k < 11; k++) {
                    player[j][k] = Integer.parseInt(input[k]);
                }
            }

            lineup = new int[11];
            visit = new boolean[11];

            brute(0);

            System.out.println(answer);
            answer = 0;
        }
    }

    public static void brute(int depth){

        if(depth == 11){

            int total = 0;
            for (int i = 0; i < 11; i++) {
                total += player[lineup[i]][i];
            }
            answer = Math.max(answer, total);

            return;
        }


        for (int i = 0; i < 11; i++) {

            if(visit[i])
                continue;

            if(player[i][depth] == 0)
                continue;

            visit[i] = true;
            lineup[depth] = i;//포지션(열), 선수(행)
            brute(depth+1);

            visit[i] = false;
        }
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글