Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions minzino/java/src/main/java/org/example/feb/bj15650/Main.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
95 changes: 95 additions & 0 deletions minzino/java/src/main/java/org/example/feb/bj15686/Main.java
Original file line number Diff line number Diff line change
@@ -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<Point> person;
static ArrayList<Point> 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;
}
}

}