[์ธํ๋ฐ/DFS/ํผ์๋ฐฐ๋ฌ๊ฑฐ๋ฆฌ]
์ค๋์ ์กฐํฉ ๋ฌธ์ ๋ก์ DFS๋ฅผ ํ์ฉํด์ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋ค์ด ํ์ด๋ณด์๋ค.
ํด๋น ๋ฌธ์ ๋ ๋ฌธ์ ์ ๋ง์ด ํท๊ฐ๋ฆฌ ์๋ ์๊ณ ๋ ผ๋์ ์์ง๋ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
ํ์ง๋ง, ์๊ณ ๋ฆฌ์ฆ์ ์ด์ ์ ๋๊ณ ๋ฐฐ์ ๋ค๋ ์๊ฐ์ผ๋ก ํ์ด๋ณด์๋ค.
<<ํ์ด>>
import java.util.ArrayList;
import java.util.Scanner;
class Point {
int x;
int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
class Main {
static int answer = Integer.MAX_VALUE;
static ArrayList<Point> house, pizza;
static int n, m, len;
static int[] combi;
private void DFS(int L, int s) {
if (L == m) {
int sum = 0;
for (Point h : house) {
int dis = Integer.MAX_VALUE;
for (int i : combi) {
dis = Math.min(dis, Math.abs(h.x - pizza.get(i).x) + Math.abs(h.y - pizza.get(i).y));
}
sum += dis;
}
answer = Math.min(answer, sum);
}
else {
for (int i = s; i < len; i++) {
combi[L] = i;
DFS(L+1, i+1);
}
}
}
public static void main(String[] args){
Main T = new Main();
house = new ArrayList<>();
pizza = new ArrayList<>();
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int tmp = in.nextInt();
if (tmp == 1) house.add(new Point(i, j));
else if (tmp == 2) pizza.add(new Point(i, j));
}
}
len = pizza.size();
combi = new int[m];
T.DFS(0, 0);
System.out.println(answer);
}
}
<๋ฌธ์ ์ ํต์ฌ>
์ด ๋ฌธ์ ์ ํต์ฌ์ ๊ฒฐ๊ตญ ์กฐํฉ์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ ์๋๋? ์ด๋ค.
๊ทธ๊ฒ ์ธ์๋ ์ ๋ง ์ฝ๊ฒ ์๊ฐํ๋ฉด ๋๋ค.
์ฐ์ ArrayList์ ์ง๊ณผ ํผ์ ์ง์ ๋ฃ์ด๋๋ค.
๊ฑฐ๊ธฐ์ ์กฐํฉ์ ๊ตฌํ์ฌ ์กฐํฉ ๊ฒฝ์ฐ์ ์ ํ์ฉํ๋ค. ์ด๋ DFS ์ฑ์ง์ ์ด์ฉํ๋ค.
DFS ์ฑ์ง
private void DFS(int L, int s) {
if (L == m) {
for(int x : combi) System.out.print(x + " ");
System.out.println();
// int sum = 0;
// for (Point h : house) {
// int dis = Integer.MAX_VALUE;
// for (int i : combi) {
// dis = Math.min(dis, Math.abs(h.x - pizza.get(i).x) + Math.abs(h.y - pizza.get(i).y));
// }
// sum += dis;
// }
// answer = Math.min(answer, sum);
}
else {
for (int i = s; i < len; i++) {
combi[L] = i;
DFS(L+1, i+1);
}
}
}
์์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ด ์กฐํฉ์์์ DFS๋ L๊ณผ s๋ฅผ ํ์ฉํด์ ์งํํ๋ค.
์ด๋ L ์ ๋ฝ๊ณ ์ํ๋ ๊ฐฏ์์ ์ธ๋ฑ์ค์ด๊ณ
s๋ ์์์ ์ด๋ผ๊ณ ๋ณด๋ฉด๋๋ค.
์ด ์กฐํฉ์ DFS์ ํํ๋ ์๊ธฐํด ๋๊ณ ๋๊ณ ๋๊ณ ์ฌ์ฉํ์.
ํ ๋ฒ ๋ ํ์ด๋ณด๋ฉด์ ๋์ฑ ์ ์ ๊ทผํ ์ ์๋๋ก ์ฐ์ตํด๋ณด์
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ธํ๋ฐ/Greedy/์ต๋์์ ์ค์ผ์ค] (0) | 2024.10.27 |
---|---|
[์ธํ๋ฐ/LIS/๊ฐ์ฅ ๋์ ํ ์๊ธฐ] (1) | 2024.09.08 |
[์ธํ๋ฐ/DFS/์ฌ๋๋ผ ์์ผ๋๋] (5) | 2024.09.01 |
[์ธํ๋ฐ/๋ค์ด๋๋ฏน(LIS)/์ต๋ ๋ถ๋ถ ์ฆ๊ฐ์์ด] (0) | 2024.05.23 |
[์ธํ๋ฐ/BFS/12.ํ ๋งํ ] (1) | 2024.05.19 |
๋๊ธ