From 6cdbc11a1288947f6ca47787f9e2b49d03a3b2ea Mon Sep 17 00:00:00 2001 From: Meenzino <86910955+Minzino@users.noreply.github.com> Date: Fri, 24 Feb 2023 16:51:14 +0900 Subject: [PATCH] =?UTF-8?q?solution:=20=EC=B9=98=ED=82=A8=EB=B0=B0?= =?UTF-8?q?=EB=8B=AC=20=EC=84=A4=ED=8C=A8=20-=20N=EA=B3=BC=20M=EC=8B=9C?= =?UTF-8?q?=EB=A6=AC=EC=A6=88=201,2=EB=B2=88=EC=9C=BC=EB=A1=9C=20=EB=B0=B1?= =?UTF-8?q?=ED=8A=B8=EB=9E=98=ED=82=B9=20=EC=97=B0=EC=8A=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/example/feb/bj15650/Main.java | 41 ++++++++ .../java/org/example/feb/bj15686/Main.java | 95 +++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 minzino/java/src/main/java/org/example/feb/bj15650/Main.java create mode 100644 minzino/java/src/main/java/org/example/feb/bj15686/Main.java 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; + } + } + +}