๋ฌธ์
์ ๋ ฅ
์ฒซ์งธ ์ค์ N(2 ≤ N ≤ 50)๊ณผ M(1 ≤ M ≤ 13)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๋์์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค.
๋์์ ์ ๋ณด๋ 0, 1, 2๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , 0์ ๋น ์นธ, 1์ ์ง, 2๋ ์นํจ์ง์ ์๋ฏธํ๋ค. ์ง์ ๊ฐ์๋ 2N๊ฐ๋ฅผ ๋์ง ์์ผ๋ฉฐ, ์ ์ด๋ 1๊ฐ๋ ์กด์ฌํ๋ค. ์นํจ์ง์ ๊ฐ์๋ M๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 13๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํ์ ์ํค์ง ์์ ์นํจ์ง์ ์ต๋ M๊ฐ๋ฅผ ๊ณจ๋์ ๋, ๋์์ ์นํจ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
https://www.acmicpc.net/problem/15686
15686๋ฒ: ์นํจ ๋ฐฐ๋ฌ
ํฌ๊ธฐ๊ฐ N×N์ธ ๋์๊ฐ ์๋ค. ๋์๋ 1×1ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ๋์์ ๊ฐ ์นธ์ ๋น ์นธ, ์นํจ์ง, ์ง ์ค ํ๋์ด๋ค. ๋์์ ์นธ์ (r, c)์ ๊ฐ์ ํํ๋ก ๋ํ๋ด๊ณ , rํ c์ด ๋๋ ์์์๋ถํฐ r๋ฒ์งธ ์นธ
www.acmicpc.net
ํ์ด
๋ฌธ์ ์์ ๊ฐ์ฅ ํ์ํ ๊ฐ์ ๊ฐ์ ์ง๊ณผ ์นํจ์ง์ ์ฃผ์(i,j)์ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด๋ฅผ ์ด์ฐจ์๋ฐฐ์ด๋ก ์ ์ฅํ์ฌ ์ฌ์ฉํ๋ ค๋ฉด ๋ง์ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค.
(์นํจ์ง์ ์๊ฐ ์ ๋์ ์ด๊ธฐ ๋๋ฌธ์!)
๋ฐ๋ผ์ ์ด์ฐจ์๋ฐฐ์ด์ ๋ง๋ค์ง ์๊ณ home, chic์ด๋ผ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ์๋ค.
๊ฐ๊ฐ์ ๋ฐฐ์ด๋์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ๊ฐ์ ์ง์ด๋ ์นํจ์ง ์๊ฐ ์ ํด์ ธ ์์ง ์์ผ๋๊น!
๋ฌธ์ ๋ง๋ณด๋ฉด ๊ณ ๋ คํด์ผํ ์ ์ด ๊ต์ฅํ ๋ง์๋ฐ, ํต์ฌ์ ์นํจ์ง์ ์ ํํ๋ ๊ฒ! -> ์กฐํฉ!
์ผ๋ฐ์ ์ธ ์กฐํฉ์ฝ๋๋ฅผ ์์ฑํ์๊ณ ๊ธฐ์ ์กฐ๊ฑด ๋ด์์
๊ฐ์ ์ง-์นํจ์ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ
๋์์ ์นํจ๊ฑฐ๋ฆฌ
์นํจ์ง ์กฐํฉ๋ค ์ค ์ต์ ์นํจ๊ฑฐ๋ฆฌ ๋ฅผ ๊ณ์ฐ.
์ด๋, ์ฃผ์ํ ์ .
๋ฆฌ์คํธ๋ add์ ๋ฐฐ์ด์ฒ๋ผ ํด๋น ์ธ๋ฑ์ค์ ๊ฐ์ ๋ฎ์ด์์ฐ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์,
๋ง์ฝ ํ์ฌ remChic.size == cnt๋ผ๋ฉด, ์ฆ ๋ฐฐ์ด๋ก ๋ฐ์ก์ ๋ ๊ฐ์ ์ธ๋ฑ์ค์ ๋ค๋ฅธ ๊ฐ์ ๋ฃ๋ ๊ฒฝ์ฐ๋ผ๋ฉด
add๊ฐ ์๋ set์ผ๋ก ๊ฐ์ replaceํด์ฃผ์ด์ผ ํ๋ค.
์ฝ๋
import java.io.*;
import java.util.*;
public class Main{
//๊ฐ์ ์ง๊ณผ ์นํจ์ง์ ์๊ฐ ์ ํด์ ธ์์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด๋์ List์ฌ์ฉ
static List<int[]> home; //๊ฐ์ ์ง ์ฃผ์๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ
static List<int[]> chic; //์นํจ์ง ์ฃผ์๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ
static List<int[]> remChic; //์ ํํ ์นํจ์ง ์ฃผ์๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ
static int chic_dis; //๊ฒฐ๊ณผ๊ฐ: ์ต๋จ์นํจ๊ฑฐ๋ฆฌ
static int n,m; //๋์ ๋๋น, ๋จ๊ฒจ์ผํ๋ ์นํจ์ง ์
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
home = new ArrayList<int[]>();
chic = new ArrayList<int[]>();
remChic = new ArrayList<int[]>();
for(int i =0 ; i < n ; i++) {
st = new StringTokenizer(br.readLine(), " ");
for(int j =0 ; j < n ; j++) {
int num = Integer.parseInt(st.nextToken());
if(num == 1) home.add(new int[] {i,j}); //๊ฐ์ ์ง ์ฃผ์(i,j)๋ฅผ ๋ฐฐ์ดํํ๋ก ๋ฆฌ์คํธ์ ์ ์ฅ
else if(num == 2) chic.add(new int[] {i, j}); //์นํจ์ง ์ฃผ์(i,j)๋ฅผ ๋ฐฐ์ดํํ๋ก ๋ฆฌ์คํธ์ ์ ์ฅ
}
}
chic_dis = Integer.MAX_VALUE; //์ต์๊ฐ ๋น๊ต๋ฅผ ์ํด ๊ฒฐ๊ณผ๊ฐ์ ์ด๊ธฐ๊ฐ์ MAX INTEGER๋ก ์ค์
chicDis(0,0);
System.out.println(chic_dis);
}
public static void chicDis(int cnt, int start) {
if(cnt == m) { //๊ธฐ์ ์กฐ๊ฑด: ํ์ฌ ์ ํํ ์นํจ์ง ๊ฐฏ์(cnt)๊ฐ ๋จ๊ฒจ์ผํ๋ ์นํจ์ง ๊ฐ์(m)์ผ๋
int chic_dis_tmp = 0; //์ ํํ ์นํจ์ง ๊ฐ์์ ๋ฐ๋ฅธ ์นํจ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ ๋ณ์
for(int i =0 ; i < home.size() ; i++) {
int dis = Integer.MAX_VALUE; //๊ฐ์ ์ง๊ณผ ์นํจ์ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ ๋ณ์
for(int j = 0 ; j < remChic.size() ; j++) { //์ ํ๋ ์นํจ์ง๋ค๊ณผ์ ์นํจ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด ์ต์๊ฐ ์ฐพ๊ธฐ
dis = Math.min(dis, Math.abs(home.get(i)[0]-remChic.get(j)[0])+ Math.abs(home.get(i)[1]-remChic.get(j)[1]));
}
chic_dis_tmp += dis; //์นํจ๊ฑฐ๋ฆฌ ๊ณ์ฐ
}
chic_dis = Math.min(chic_dis, chic_dis_tmp); //์ง๊ธ๊น์ง์ ์กฐํฉ ์ค, ๊ฐ์ฅ ์์ ์นํจ๊ฑฐ๋ฆฌ ๊ฐ ์ฐพ๊ธฐ
return;
}
for(int i = start; i < chic.size() ; i++) { //์นํจ์ง ์กฐํฉ ์ฝ๋
if(remChic.size() == cnt) remChic.add(chic.get(i));
else remChic.set(cnt, chic.get(i));
chicDis(cnt+1, i+1);
}
}
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BruteForce' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 4012๋ฒ ์๋ฆฌ์ฌ, [๋ฐฑ์ค] 14889๋ฒ ์คํํธ์ ๋งํฌ (0) | 2021.08.18 |
---|---|
[๋ฐฑ์ค] 2961๋ฒ ๋์์ด๊ฐ ๋ง๋ ๋ง์๋ ์์ (0) | 2021.08.17 |
[๋ฐฑ์ค]17281๋ฒ โพ(์ผ๊ตฌ) (0) | 2021.08.17 |
[SWEA] 6808๋ฒ ๊ท์์ด์ ์ธ์์ด์ ์นด๋๊ฒ์(java) (0) | 2021.08.13 |
[๋ฐฑ์ค] 17135๋ฒ ์บ์ฌ๋ํ์ค (java) (0) | 2021.08.13 |