๐ ๋ฌธ์ ๋งํฌ
๐ ํ์ด ๊ณผ์
- ๋ฐฑํธ๋ํน์ ํ์ฉํ ๊ตฌํ ๋ฌธ์ ์
๋๋ค.
- ๋ฐฐ์ด์ ๊ฐ์ ์
๋ ฅ ๋ฐ์ ๋ ์นํจ์ง์ ํด๋นํ๋ ๊ฐ์ ์นํจ๋ฆฌ์คํธ์, ์ง์ ํด๋นํ๋ ๊ฐ์ ์ง ๋ฆฌ์คํธ์ ๋ด์ต๋๋ค.
- ์ดํ, ๋ฐฑํธ๋ํน ๋ฐฉ์์ ํ์ฉํ์ฌ ์นํจ ๋ฆฌ์คํธ์ ์๋ ๊ฐ๋ค์ ์ํํฉ๋๋ค.
- ๋ง์ฝ ์ธ๋ฑ์ค ๊ฐ์ด m๊ฐ์ด ๋๋ค๋ฉด, ๊ทธ๋์์ผ ์ง ๋ฆฌ์คํธ์ ์๋ ๊ฐ๋ค๊ณผ ์ํํ๋ฉด์ ์นํจ ๊ฑฐ๋ฆฌ ๋ฐ ๋์์ ์นํจ ๊ฑฐ๋ฆฌ๊ฐ์ ๊ตฌํฉ๋๋ค.
- ๊ตฌํ ๋์์ ์นํจ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ๊ฐฑ์ ํ๋ฉด์ ๋ฌธ์ ๋ฅผ ์งํํฉ๋๋ค.
- ๋ฌธ์ ๋ฅผ ํ์ดํ๋ฉฐ ์ ๊ฐ ์ฌ๋ฌ๋ฒ ์ค์ํ ๋ถ๋ถ์ด ์์ด์ ๊ณต์ ํฉ๋๋ค.
- ๋ฐฑํธ๋ํน ๋ฐฉ์์ ์งํํ ๋ for๋ฌธ์ ์ธ๋ฑ์ค์ ์ ๊ฒฝ์ ๋ชป์จ์ ์ฌ๊ท ๋ฉ์๋ ํธ์ถ์ ๊ฐ์ i๋ฅผ ์ด์ฉํ์ง ์๊ณ start ๋ณ์๋ฅผ ์ด์ฉํ์ต๋๋ค.
- ์ด๋ ๊ฒ ํ ๊ฒฝ์ฐ, ๋ต์ ๊ตฌํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ๋ฐ๋ผ์, for๋ฌธ์ผ๋ก ํ๋ฒ์ ๋ชจ๋ ์ํํ ์ ์๋๋ก ์ธ๋ฑ์ค๋ฅผ ์ ๊ฒฝ ์จ์ค์ผ ํฉ๋๋ค.
๐ป ์ฝ๋
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
static int[][] arr;
static boolean[] visited;
static int n, m, answer;
static ArrayList<Point> home;
static ArrayList<Point> chicken;
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());
home = new ArrayList<>();
chicken = new ArrayList<>();
arr = new int[n][n];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
if (arr[i][j] == 1) {
home.add(new Point(i, j));
} else if (arr[i][j] == 2) {
chicken.add(new Point(i, j));
}
}
}
answer = Integer.MAX_VALUE;
visited = new boolean[chicken.size()];
solve(0, 0);
bw.write(answer + "\n");
bw.flush();
bw.close();
br.close();
}
public static void solve(int start, int depth) {
if (depth == m) {
int res = 0;
for (int i = 0; i < home.size(); i++) {
int temp = Integer.MAX_VALUE;
for (int j = 0; j < chicken.size(); j++) {
if (visited[j]) {
int dist = Math.abs(home.get(i).x - chicken.get(j).x)
+ Math.abs(home.get(i).y - chicken.get(j).y);
temp = Math.min(temp, dist);
}
}
res += temp;
}
answer = Math.min(answer, res);
return;
}
for (int i = start; i < chicken.size(); i++) {
visited[i] = true;
solve(i + 1, depth + 1);
visited[i] = false;
}
}
static class Point {
int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
}
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 4963๋ฒ : ์ฌ์ ๊ฐ์ (Java) (0) | 2022.03.22 |
---|---|
๋ฐฑ์ค 2110๋ฒ : ๊ณต์ ๊ธฐ ์ค์น (Java) (0) | 2022.03.22 |
๋ฐฑ์ค 16953๋ฒ : A -> B (Java) (0) | 2022.03.22 |
๋ฐฑ์ค 1991๋ฒ : ํธ๋ฆฌ ์ํ (Java) (0) | 2022.02.12 |
๋ฐฑ์ค 11725๋ฒ : ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ (Java) (0) | 2022.02.12 |