개발 공부 기록
Published 2022. 3. 30. 23:40
백준 14889 자바 풀이 알고리즘/백준
728x90

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

 

14889번: 스타트와 링크

예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.

www.acmicpc.net

DFS 조합을 이용해서 풀면 되는 문제.

visit 체크를 해서 푸는 점이 새로웠다. 생각보다 비효율적인 것 같은데도 시간초과가 안나더라..

다른 블로그를 참고해서 풀었다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    static int N;
    static int[][] map;
    static boolean[] visit;
    static int MIN = Integer.MAX_VALUE;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        N = Integer.parseInt(br.readLine());

        map = new int[N][N]; //가로 세로 0 ~ N-1
        visit = new boolean[N];

        for(int i = 0; i < N; i ++) {
            String[] tmp = br.readLine().split(" ");
            for(int j = 0; j < N; j ++) {
                map[i][j] = Integer.parseInt(tmp[j]);
            }
        }

        dfs(0, 0);

        System.out.println(MIN);
    }

    public static void dfs(int at, int dep) {

        if(dep == N/2) {

            dif();
            return;
        }

        for(int i = at; i < N; i ++) {
            if(!visit[i]) {
                visit[i] = true;
                dfs(i + 1, dep + 1);
                visit[i] = false;
            }
        }
    }

    private static void dif() {

        int start = 0;
        int link = 0;

        for(int i = 0; i < N - 1; i ++) {
            for(int j = i + 1; j < N; j ++) {
                if(visit[i] && visit[j]) {
                    start += map[i][j] + map[j][i];
                }
                if(!visit[i] && !visit[j]) {
                    link += map[i][j] + map[j][i];
                }
            }
        }

        int diff = Math.abs(start - link);

        if(diff == 0) {
            System.out.println(0);
            System.exit(0);
        }

        MIN = Math.min(MIN, diff);
    }
}

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

백준 17144 미세먼지 안녕 자바 풀이  (0) 2022.04.21
백준 16236 아기 상어 자바 풀이  (0) 2022.04.20
백준 13549 자바 풀이  (0) 2022.03.26
백준 12851 자바 풀이  (0) 2022.03.22
백준 16953 자바 풀이  (0) 2022.03.11
profile

개발 공부 기록

@찐만두

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!