시간 & 메모리 제한
문제
입력 & 출력
예제 입력
브루드 포스를 이용한 문제풀이
package com.Back;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
class Back_15686 {
static int N;
static int M;
static int[][] arr;
static ArrayList<Dot> chicken;
static ArrayList<Dot> person;
static int[] output;
static boolean[] visited;
static int result;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
N = Integer.parseInt(str[0]);
M = Integer.parseInt(str[1]);
arr = new int[N][N];
result = Integer.MAX_VALUE;
chicken = new ArrayList<Dot>();
person = new ArrayList<Dot>();
for (int i = 0; i < N; i++) {
str = br.readLine().split(" ");
for (int j = 0; j < N; j++) {
arr[i][j] = Integer.parseInt(str[j]);
if (arr[i][j] == 1) {
person.add(new Dot(i, j));
} else if (arr[i][j] == 2) {
chicken.add(new Dot(i, j));
}
}
}
visited = new boolean[chicken.size()];
output = new int[chicken.size()];
for (int i = 0; i < chicken.size(); i++) {
visited[i] = true;
ChickenSelection(i, 0);
visited[i] = false;
}
System.out.println(result);
}
public static void ChickenSelection(int start, int depth) {
output[depth] = start + 1;
for (int i = start; i < chicken.size(); i++) {
if (visited[i])
continue;
visited[i] = true;
ChickenSelection(i, depth + 1);
visited[i] = false;
}
if (depth == M - 1) {
int sum = 0;
int currentM = 0;
for (int i = 0; i < person.size(); i++) {
int min = Integer.MAX_VALUE;
for (int j = 0; j < M; j++) {
currentM = Calc(person.get(i), chicken.get(output[j] - 1));
min = Math.min(min, currentM);
}
sum = sum + min;
}
result = Math.min(result, sum);
}
}
public static int Calc(Dot d1, Dot d2) {
return Math.abs(d1.x - d2.x) + Math.abs(d1.y - d2.y);
}
}
class Dot {
int x;
int y;
Dot(int x, int y) {
this.x = x;
this.y = y;
}
}
- 치킨과 사람에 대한 ArrayList를 만들어 줍니다.
- arr배열에 값을 넣는 동시에 1이면 사람List에, 2이면 치킨List에 넣어줍니다.
- 치킨으로 사용할 집을 선택을 해줍니다 (조합)
- 선택된 집을 기준으로 사람들과의 거리중 최소인 값을 찾아 계속 더해줍니다.
- 조합중에서 가장 최소인 값을 담아줍니다.
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
백준_1107 리모컨 (자바) / 브루트포스 (0) | 2021.04.15 |
---|---|
백준_17471 게리맨더링(자바) / BFS + 조합 (0) | 2021.04.14 |
백준_12865 평범한 배낭(자바) / DP (0) | 2021.04.13 |
백준_2293 동전1(자바) / DP (0) | 2021.04.08 |
백준_10163 색종이(자바) (0) | 2021.04.06 |