- API MarketPlace ๊ธ๋ก๋ฒ ์ํฌํฐ์ฆ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- DB
- ํ์ด์๊ณต๋ชจ์
- ์จ์ผ๋ํ
- SQL
- linux
- ์๋ฐ
- RaspberryPi
- Spring
- Java
- ํ์ด์ฌ
- ํ์ด์
- appetizer
- API๋ง์ผํ๋ ์ด์ค
- ์คํฝ๋ ํ
- ICT๋ฉํ ๋ง
- ํ๋ก๋ณด๋ ธ
- ์ด๋ธ์
- ์คํฝ์ค๋น
- ICT
- JOBํ๊ณ
- ์กํ๊ณ
- mysql
- ์๋์ด๋ ธ
- ict๊ณต๋ชจ์
- DATABASE
- Naver Cloud
- python
- TSQL
- Today
- Total
miinsun
[Algorithm]์๊ณ ๋ฆฌ์ฆ ์๋ฐ_70 ํผ์ ๋ฐฐ๋ฌ ๊ฑฐ๋ฆฌ : DFS ๋ณธ๋ฌธ
[Algorithm]์๊ณ ๋ฆฌ์ฆ ์๋ฐ_70 ํผ์ ๋ฐฐ๋ฌ ๊ฑฐ๋ฆฌ : DFS
miinsun 2022. 3. 9. 00:18๐ฌ ๋ฌธ์ ์ค๋ช
N×N ํฌ๊ธฐ์ ๋์์ง๋๊ฐ ์์ต๋๋ค. ๋์์ง๋๋ 1×1ํฌ๊ธฐ์ ๊ฒฉ์์นธ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
๊ฐ ๊ฒฉ์์นธ์๋ 0์ ๋น์นธ, 1์ ์ง, 2๋ ํผ์์ง์ผ๋ก ํํ๋ฉ๋๋ค. ๊ฐ ๊ฒฉ์์นธ์ ์ขํ(ํ๋ฒํธ, ์ด ๋ฒํธ)๋ก ํํ๋ฉ๋๋ค.
ํ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง์ด๊ณ , ์ด ๋ฒํธ๋ 1๋ถํฐ N๊น์ง์ ๋๋ค.๋์์๋ ๊ฐ ์ง๋ง๋ค “ํผ์๋ฐฐ๋ฌ๊ฑฐ๋ฆฌ”๊ฐ ์๋๋ฐ ๊ฐ ์ง์ ํผ์๋ฐฐ๋ฌ๊ฑฐ๋ฆฌ๋ ํด๋น ์ง๊ณผ ๋์์ ์กด์ฌํ๋ ํผ์์ง๋ค๊ณผ์ ๊ฑฐ๋ฆฌ ์ค ์ต์๊ฐ์ ํด๋น ์ง์ “ํผ์๋ฐฐ๋ฌ๊ฑฐ๋ฆฌ”๋ผ๊ณ ํ๋ค. ์ง๊ณผ ํผ์์ง์ ํผ์๋ฐฐ๋ฌ๊ฑฐ๋ฆฌ๋ |x1-x2|+|y1-y2| ์ด๋ค.
์๋ฅผ ๋ค์ด, ๋์์ ์ง๋๊ฐ ์๋์ ๊ฐ๋ค๋ฉด
(1, 2)์ ์๋ ์ง๊ณผ (2, 3)์ ์๋ ํผ์์ง๊ณผ์ ํผ์ ๋ฐฐ๋ฌ ๊ฑฐ๋ฆฌ๋ |1-2| + |2-3| = 2๊ฐ ๋๋ค.
์ต๊ทผ ๋์๊ฐ ๋ถ๊ฒฝ๊ธฐ์ ์ ์ด๋ค์ด ์ฐํ์ฃฝ์ ์๊ฒผ๋ ํผ์์ง๋ค์ด ํ์ฐํ๊ณ ์์ต๋๋ค. ๋์ ์์ฅ์ ๋์์ ์๋ ํผ์์ง ์ค M๊ฐ๋ง ์ด๋ฆฌ๊ณ ๋๋จธ์ง๋ ๋ณด์กฐ๊ธ์ ์ฃผ๊ณ ํ์ ์ํค๋ ค๊ณ ํฉ๋๋ค.
์์ฅ์ ์ด๋ฆฌ๊ณ ์ ํ๋ ํผ์์ง M๊ฐ๋ฅผ ์ ํํ๋ ๊ธฐ์ค์ผ๋ก ๋์์ ํผ์๋ฐฐ๋ฌ๊ฑฐ๋ฆฌ๊ฐ ์ต์๊ฐ ๋๋ M๊ฐ์ ํผ์์ง์ ์ ํํ๋ ค๊ณ ํฉ๋๋ค.๋์์ ํผ์ ๋ฐฐ๋ฌ ๊ฑฐ๋ฆฌ๋ ๊ฐ ์ง๋ค์ ํผ์ ๋ฐฐ๋ฌ ๊ฑฐ๋ฆฌ๋ฅผ ํฉํ ๊ฒ์ ๋งํฉ๋๋ค.
๐จ ์ ์ถ๋ ฅ ์
- ์ ๋ ฅ
- ์ฒซ์งธ ์ค์ N(2 ≤ N ≤ 50)๊ณผ M(1 ≤ M ≤ 12)์ด ์ฃผ์ด์ง๋ค.
- ๋์งธ ์ค๋ถํฐ ๋์ ์ ๋ณด๊ฐ ์ ๋ ฅ๋๋ค.
4 4
0 1 2 0
1 0 2 1
0 2 1 2
2 0 1 2
- ์ถ๋ ฅ
- ์ฒซ์งธ ์ค์ M๊ฐ์ ํผ์์ง์ด ์ ํ๋์์ ๋ ๋์์ ์ต์ ํผ์๋ฐฐ๋ฌ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ค.
6
๐ป Solution.java
/* ํผ์ ๋ฐฐ๋ฌ ๊ฑฐ๋ฆฌ :: DFS */
import java.util.*;
class Point {
public int x, y;
Point (int x, int y){
this.x = x;
this.y = y;
}
}
public class Main {
static int n, m, len, answer = Integer.MAX_VALUE;
static int[] combi;
static ArrayList<Point> pz, hs;
public void DFS(int L, int s) {
//ํผ์์ง์ m๊ฐ๋งํผ ์ ํ
if(L == m) {
int sum = 0;
// ์ง๋ค์ ํ๋์ฉ ๋์ด
for(Point h : hs) {
int dis = Integer.MAX_VALUE;
for(int i : combi) {
dis = Math.min(dis, Math.abs(h.x - pz.get(i).x) + Math.abs(h.y - pz.get(i).y));
}
sum += dis;
}
answer = Math.min(sum, answer);
}
else {
for(int i = s; i < len; i++) {
combi[L] = i;
DFS(L+1, i+1);
}
}
}
public static void main(String[] args){
Main main = new Main();
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
pz = new ArrayList<>();
hs = new ArrayList<>();
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
int tmp = sc.nextInt();
//์ขํ๊ฐ 1์ด๋ฉด hs์ ์ ์ฅ, 2๋ฉด pz์ ์ ์ฅ
if(tmp == 1) hs.add(new Point(i, j));
else if(tmp == 2) pz.add(new Point(i, j));
}
}
len = pz.size();
combi = new int[m];
main.DFS(0, 0);
System.out.println(answer);
sc.close();
return ;
}
}
'Algorithm > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm]์๊ณ ๋ฆฌ์ฆ ์๋ฐ_72 ๊ณ๋จ ์ค๋ฅด๊ธฐ :: DynamicProgramming (0) | 2022.03.12 |
---|---|
[Algorithm]์๊ณ ๋ฆฌ์ฆ ์๋ฐ_71 ์ต๋ ์์ ์ค์ผ์ฅด :: PriorityQueue (0) | 2022.03.09 |
[Algorithm]์๊ณ ๋ฆฌ์ฆ ์๋ฐ_69 ๊ฒฐํผ์ (0) | 2022.03.08 |
[Algorithm]์๊ณ ๋ฆฌ์ฆ ์๋ฐ_68 ํ์์ค ๋ฐฐ์ (0) | 2022.03.08 |
[Algorithm]์๊ณ ๋ฆฌ์ฆ ์๋ฐ_67 ์จ๋ฆ ์ ์ (0) | 2022.03.08 |