less than 1 minute read

문제 풀이 방식

  • 전반적으로 14889 와 유사하다.
  • 전역 변수 사용에만 유의해서 문제를 풀어주면 된다. boolean[] visited

문제 풀이 (Java)

import java.io.BufferedReader;  
import java.io.InputStreamReader;  
import java.util.StringTokenizer;  
  
public class boj15661 {  
    static int N;  
    static int[][] stat;  
    static int minimum = Integer.MAX_VALUE;  
    public static void main(String[] args) throws Exception {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        StringTokenizer st = new StringTokenizer(br.readLine());  
  
        N = Integer.parseInt(st.nextToken());  
        stat = new int[N][N];  
  
        for(int j = 0; j < N; j++){  
            st = new StringTokenizer(br.readLine());  
            for(int i = 0; i < N; i++){  
                stat[i][j] = Integer.parseInt(st.nextToken());  
            }  
        }  
  
        DFS(0, new boolean[N]);  
  
        System.out.println(minimum);  
    }  
  
    static void DFS(int D, boolean[] visited) {  
        if (D == N) {  
            int S = 0, L = 0;  
            for (int i = 0; i < N; i++) {  
                for (int j = 0; j < N; j++) {  
                    if (visited[i] && visited[j]) {  
                        S += stat[i][j];  
                    } else if (!visited[i] && !visited[j]) {  
                        L += stat[i][j];  
                    }  
                }  
            }  
            minimum = Math.min(minimum, Math.abs(S - L));  
        } else {  
  
            // D 선수를 포함하는 경우  
            visited[D] = true;  
            DFS(D + 1, visited);  
  
            // D 선수를 포함하지 않는 경우  
            visited[D] = false;  
            DFS(D + 1, visited);  
        }  
    }  
}

Leave a comment