Dev.baelanche

[백준 11578] 팀원 모집 본문

Data Structure & Algorithm/PS - JAVA

[백준 11578] 팀원 모집

baelanche 2019. 7. 23. 20:58
반응형

N, M 이 최대 10으로 충분히 작기 때문에 완전탐색으로 문제를 풀 수 있다.

 

백트래킹으로 모든 경우를 되집어보며 구해주었다.

 

public class Main {
    
    static int n;
    static int m;
    static int a[][];
    static boolean visited[];
    static int min = Integer.MAX_VALUE;
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        n = sc.nextInt();
        m = sc.nextInt();
        a = new int[11][11];
        visited = new boolean[11];
        
        for(int i=1; i<=m; i++) {
            int o = sc.nextInt();
            while(o-->0) {
                a[i][sc.nextInt()] = 1;
            }
        }
        
        backTracking(0, 1);
        System.out.println(min == Integer.MAX_VALUE ? -1 : min);
    }
    
    public static void backTracking(int cnt, int idx) {
        if(idx == m+1) {
            boolean clear = true;
            for(int i=1; i<=n; i++)
                if(!visited[i])
                    clear = false;
            
            if(clear) {
                min = Math.min(min, cnt);
            }
            return;
        }
        
        for(int i=idx; i<=m; i++) {
            boolean prev[] = new boolean[n+1];
            for(int j=0; j<=n; j++)
                prev[j] = visited[j];
            
            for(int j=1; j<=n; j++)
                if(a[i][j] == 1) visited[j] = true;
            
            backTracking(cnt+1, i+1);
            
            for(int j=1; j<=n; j++)
                if(!prev[j]) visited[j] = false;
            
            backTracking(cnt, i+1);
        }
    }
}
반응형

'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글

[백준 11586] 지영 공주님의 마법 거울  (0) 2019.07.23
[백준 11580] Footprint  (0) 2019.07.23
[백준 11575] Affine Cipher  (0) 2019.07.20
[백준 13412] 서로소 쌍  (0) 2019.07.20
[백준 13423] Three Dots  (0) 2019.07.20
Comments