BOJ_S1_1389
๐ [S1_1992] ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] map;
static boolean[][] v;
static int N,M;
static int min;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
// input start
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
// ๊ด๊ณ๋
map = new int[N+1][N+1];
// ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
v = new boolean[N+1][N+1];
// ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ ๋ฐฐ์ด
int[] res = new int[N+1];
for(int i=0; i<M; i++) {
st = new StringTokenizer(br.readLine(), " ");
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
// ์๋ฐฉํฅ
map[start][end] = 1;
map[end][start] = 1;
}
// input end
// ๋ฐฐ์ด ๋๋ฉด์ check
for(int i=1;i<N+1;i++) {
for(int j=1;j<N+1;j++) {
// ์ถ๋ฐ๊ณผ ๋์ฐฉ์ด ๊ฐ์ผ๋ฉด ํต๊ณผ
if(i == j) continue;
// ๋ง์ฝ ํ๋ฒ์ ์ฐ๊ฒฐ๋์ด์์ผ๋ฉด
if(map[i][j] == 1) {
// ์ผ๋น๋ฒ ์ด์ปจ ์ 1 ์ถ๊ฐ
res[i] += 1;
}
// ํ๋ฒ์ ์ฐ๊ฒฐ์๋์ด์์ผ๋ฉด ๊ฒฝ๋ก ์ฐพ๊ธฐ
else {
// ๋ฐฉ๋ฌธ๋ฐฐ์ด ์ด๊ธฐํ
init();
// ์ต์๊ฐ ์ด๊ธฐํ
min = Integer.MAX_VALUE;
dfs(i,j,0);
res[i] += min;
}
}
}
min = Integer.MAX_VALUE;
// ๊ฒฐ๊ณผ๋ฒํธ
int num = 0;
// ์ผ๋น ๋ฒ ์ด์ปจ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋ ๊ตฌํ๊ธฐ
for(int i=res.length-1; i>0; i--) {
min = Math.min(min,res[i]);
if(min == res[i]) {
num = i;
}
}
System.out.println(num);
}
static void dfs(int start, int end, int sum) {
// ๋์ฐฉ
if(map[start][end] == 1) {
sum++;
min = Math.min(sum, min);
return;
}
for(int i=1;i<N+1;i++) {
// ์ถ๋ฐ์ง์ ๋ชฉ์ ์ง๊ฐ ๊ฐ์ผ๋ฉด ํต๊ณผ ( ๊ฐ์ง์น๊ธฐ )
if(start == i) continue;
// ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด, ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด
if(map[start][i] == 1 && !v[start][i]) {
// ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
v[start][i] = true;
v[i][start] = true;
// ๊ฒฝ๋ก ํ๋ ๋ํด์ฃผ๊ธฐ
sum++;
dfs(i,end,sum);
// ๋ฐฑํธ๋ํน
sum--;
v[start][i] = false;
v[i][start] = false;
}
}
}
// ๋ฐฉ๋ฌธ๋ฐฐ์ด ์ด๊ธฐํ
static void init() {
for(int i=1;i<N+1;i++) {
for(int j=1;j<N+1;j++) {
v[i][j] = false;
}
}
}
}
๐ค ๋์ ์๊ฐ
๋ฌธ์ ์ดํด๋ ์ด๋ ต์ง ์์๋ค.
์ค๋ช
์์ ํ๊ฐ์ง ์์๋ฅผ ๊ฐ์ง๊ณ ์์ธํ ์ค๋ช
์ ํด์คฌ๊ธฐ ๋๋ฌธใ
ใ
์ฒ์ ์ค๊ณํ ๋ ์๊ฐํ ๊ฒ์ด
- ๊ด๊ณ๋ ์ ์ฅํ ๋ฐฐ์ด int map[N+1][n+1]
- N๋ช ๋ง๋ค ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด int res[N+1]
- ๋ฐฉ๋ฌธ์ฒดํฌ ๋ฐฐ์ด boolean v[N+1]
- dfs(start,end,sum) ํจ์
- ๋ฐฉ๋ฌธ์ฒดํฌ ๋ฐฐ์ด ์ด๊ธฐํ ํจ์ init()
์ด๋ ๊ฒ ๊ตฌ์์ ํ๋๋ฐ ์๊ฐํ ๊ฒ๊ณผ ๊ฑฐ์ ๋ง์๋จ์ด์ ธ์ ๊ธฐ๋ถ์ด ์ข์๋ค ใ
ใ
N๋ช
์ ์ ์ ๋ค๋ง๋ค ๋ค๋ฅธ ์ ์ ๋ค์ ๊ฒฝ๋ก๋ค์ ๋ค ๋ํด์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๊ตฌํด์ฃผ๊ณ
N๊ฐ์ ์ผ๋น ๋ฒ ์ด์ปจ ์ ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ์ ์ ๋ฅผ ๊ตฌํด์ฃผ๋ฉด ๋๋ค.
๋ง์ฝ ๊ฐ์ ๊ฐ์ด ์๋ค๋ฉด ์๊ฐ ๋ ์ ์ ์ ์ ๋ฅผ ๊ตฌํด์ฃผ๋ฉด ๋๋ค.
์
๋ ฅ์ ๋ฐ๊ณ ์ด์ค for ๋ฌธ๊ณผ dfs ๋ฅผ ํตํด ๊ตฌํด์ฃผ์๋ค.