diff --git a/minzino/java/src/main/java/org/example/feb/bj15650/Main.java b/minzino/java/src/main/java/org/example/feb/bj15650/Main.java new file mode 100644 index 0000000..f1d4870 --- /dev/null +++ b/minzino/java/src/main/java/org/example/feb/bj15650/Main.java @@ -0,0 +1,41 @@ +package main.java.org.example.feb.bj15650; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class Main { + private static int n, m; + private static int[] arr; + private static StringBuilder sb = new StringBuilder(); + private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + private static StringTokenizer st; + + public static void main(String[] args) throws IOException { + st = new StringTokenizer(br.readLine()); + + n = Integer.parseInt(st.nextToken()); + m = Integer.parseInt(st.nextToken()); + + arr = new int[m]; + + dfs(1, 0); + System.out.println(sb); + } + + private static void dfs(int at, int depth) { + if (depth == m) { + for (int val : arr) { + sb.append(val).append(" "); + } + sb.append("\n"); + return; + } + + for (int i = at; i <= n; i++) { + arr[depth] = i; + dfs(i + 1, depth + 1); + } + } +} diff --git a/minzino/java/src/main/java/org/example/feb/bj15686/Main.java b/minzino/java/src/main/java/org/example/feb/bj15686/Main.java new file mode 100644 index 0000000..94a1a62 --- /dev/null +++ b/minzino/java/src/main/java/org/example/feb/bj15686/Main.java @@ -0,0 +1,95 @@ +package main.java.org.example.feb.bj15686; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayList; +import java.util.StringTokenizer; + +class Point { + int x; + int y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } +} + +public class Main { + static int N, M; + static int[][] map; + static ArrayList person; + static ArrayList chicken; + static int ans; + static boolean[] open; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + map = new int[N][N]; + person = new ArrayList<>(); + chicken = new ArrayList<>(); + + // 미리 집과 치킨집에 해당하는 좌표를 ArrayList에 넣어 둠. + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < N; j++) { + map[i][j] = Integer.parseInt(st.nextToken()); + + if (map[i][j] == 1) { + person.add(new Point(i, j)); + } else if (map[i][j] == 2) { + chicken.add(new Point(i, j)); + } + } + } + + ans = Integer.MAX_VALUE; + open = new boolean[chicken.size()]; + + DFS(0, 0); + bw.write(ans + "\n"); + bw.flush(); + bw.close(); + br.close(); + } + + public static void DFS(int start, int cnt) { + if (cnt == M) { + int res = 0; + + for (int i = 0; i < person.size(); i++) { + int temp = Integer.MAX_VALUE; + + // 어떤 집과 치킨집 중 open한 치킨집의 모든 거리를 비교한다. + // 그 중, 최소 거리를 구한다. + for (int j = 0; j < chicken.size(); j++) { + if (open[j]) { + int distance = Math.abs(person.get(i).x - chicken.get(j).x) + + Math.abs(person.get(i).y - chicken.get(j).y); + + temp = Math.min(temp, distance); + } + } + res += temp; + } + ans = Math.min(ans, res); + return; + } + + // 백트래킹 + for (int i = start; i < chicken.size(); i++) { + open[i] = true; + DFS(i + 1, cnt + 1); + open[i] = false; + } + } + +}