๋ค๋ฆฌ๋ง๋ค๊ธฐ2 (๋ฌธ์ _ 17472)
์ฌ์ผ๋ก ์ด๋ฃจ์ด์ง ๋๋ผ๊ฐ ์๊ณ , ๋ชจ๋ ์ฌ์ ๋ค๋ฆฌ๋ก ์ฐ๊ฒฐํ๋ ค๊ณ ํ๋ค. ์ด ๋๋ผ์ ์ง๋๋ N×M ํฌ๊ธฐ์ ์ด์ฐจ์ ๊ฒฉ์๋ก ๋ํ๋ผ ์ ์๊ณ , ๊ฒฉ์์ ๊ฐ ์นธ์ ๋ ์ด๊ฑฐ๋ ๋ฐ๋ค์ด๋ค.
์ฌ์ ์ฐ๊ฒฐ๋ ๋ ์ด ์ํ์ข์ฐ๋ก ๋ถ์ด์๋ ๋ฉ์ด๋ฆฌ๋ฅผ ๋งํ๊ณ , ์๋ ๊ทธ๋ฆผ์ ๋ค ๊ฐ์ ์ฌ์ผ๋ก ์ด๋ฃจ์ด์ง ๋๋ผ์ด๋ค. ์์น ๋์ด์๋ ์นธ์ ๋ ์ด๋ค.
๋ค๋ฆฌ๋ ๋ฐ๋ค์๋ง ๊ฑด์คํ ์ ์๊ณ , ๋ค๋ฆฌ์ ๊ธธ์ด๋ ๋ค๋ฆฌ๊ฐ ๊ฒฉ์์์ ์ฐจ์งํ๋ ์นธ์ ์์ด๋ค. ๋ค๋ฆฌ๋ฅผ ์ฐ๊ฒฐํด์ ๋ชจ๋ ์ฌ์ ์ฐ๊ฒฐํ๋ ค๊ณ ํ๋ค. ์ฌ A์์ ๋ค๋ฆฌ๋ฅผ ํตํด ์ฌ B๋ก ๊ฐ ์ ์์ ๋, ์ฌ A์ B๋ฅผ ์ฐ๊ฒฐ๋์๋ค๊ณ ํ๋ค. ๋ค๋ฆฌ์ ์ ๋์ ์ฌ๊ณผ ์ธ์ ํ ๋ฐ๋ค ์์ ์์ด์ผ ํ๊ณ , ํ ๋ค๋ฆฌ์ ๋ฐฉํฅ์ด ์ค๊ฐ์ ๋ฐ๋๋ฉด ์๋๋ค. ๋, ๋ค๋ฆฌ์ ๊ธธ์ด๋ 2 ์ด์์ด์ด์ผ ํ๋ค.
๋ค๋ฆฌ์ ๋ฐฉํฅ์ด ์ค๊ฐ์ ๋ฐ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์, ๋ค๋ฆฌ์ ๋ฐฉํฅ์ ๊ฐ๋ก ๋๋ ์ธ๋ก๊ฐ ๋ ์ ๋ฐ์ ์๋ค. ๋ฐฉํฅ์ด ๊ฐ๋ก์ธ ๋ค๋ฆฌ๋ ๋ค๋ฆฌ์ ์ ๋์ด ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก ์ฌ๊ณผ ์ธ์ ํด์ผ ํ๊ณ , ๋ฐฉํฅ์ด ์ธ๋ก์ธ ๋ค๋ฆฌ๋ ๋ค๋ฆฌ์ ์ ๋์ด ์ธ๋ก ๋ฐฉํฅ์ผ๋ก ์ฌ๊ณผ ์ธ์ ํด์ผ ํ๋ค.
์ฌ A์ B๋ฅผ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ๊ฐ ์ค๊ฐ์ ์ฌ C์ ์ธ์ ํ ๋ฐ๋ค๋ฅผ ์ง๋๊ฐ๋ ๊ฒฝ์ฐ์ ์ฌ C๋ A, B์ ์ฐ๊ฒฐ๋์ด์๋ ๊ฒ์ด ์๋๋ค.
๋ค๋ฆฌ๊ฐ ๊ต์ฐจํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์๋ ์๋ค. ๊ต์ฐจํ๋ ๋ค๋ฆฌ์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํ ๋๋ ๊ฐ ์นธ์ด ๊ฐ ๋ค๋ฆฌ์ ๊ธธ์ด์ ๋ชจ๋ ํฌํจ๋์ด์ผ ํ๋ค.
๋๋ผ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ์ฌ์ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ ๊ธธ์ด์ ์ต์๊ฐ์ ๊ตฌํด๋ณด์.
์
๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ์ค์ M๊ฐ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์๋ 0 ๋๋ 1์ด๋ค. 0์ ๋ฐ๋ค, 1์ ๋
์ ์๋ฏธํ๋ค.
์ถ๋ ฅ
๋ชจ๋ ์ฌ์ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ ๊ธธ์ด์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค. ๋ชจ๋ ์ฌ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
์ ํ
- 1 ≤ N, M ≤ 10
- 3 ≤ N×M ≤ 100
- 2 ≤ ์ฌ์ ๊ฐ์ ≤ 6
์์
7 8
0 0 0 0 0 0 1 1
1 1 0 0 0 0 1 1
1 1 0 0 0 0 0 0
1 1 0 0 0 1 1 0
0 0 0 0 0 1 1 0
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
< answer >
9
ํ์ด
์ฌ์ ๊ฐ์์ ๋งต์ ํฌ๊ธฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ฌ์ ์ขํ๋ฅผ hashset์ ์ ์ฅํ๋ ๋ฐฉ์์ ์ ํํ๋ค.
1. ์ฌ์ ๋ชจ๋ ํ์ํ๋ฉฐ ์ฌ์ ๋๋๊ณ ์ขํ๋ฅผ ์ ์ฅํ๋ค.
-
dfs๋ฅผ ์ด์ฉํด ๋ฐ๋ค์ ์ฌ์ ๋๋๋ค
ArrayList<HashSet>() ์ ์ฌ์ ์ขํ๋ฅผ ์ฌ๋ง๋ค ๋๋ ์ ์ ์ฅํ๋ค.
dfs(int i, int j) {
hs.get(iCnt).add(new Pair(i, j));
visited[i][j] = true;
for (int dir = 0; dir < dx.length; dir++) {
int nx = dx[dir] + i;
int ny = dy[dir] + j;
if (nx < 0 || nx >= n || ny < 0 || ny >= m) {
continue;
}
if (map[nx][ny] == 1 && !visited[nx][ny])
dfs(nx, ny);
}
}
2. ๋ชจ๋ ์ฌ์ด ์ฐ๊ฒฐ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ ๋ชจ๋ ์ขํ์์ ๋ค๋ฆฌ๋ฅผ 4๊ฐ์ง ๋ฐฉํฅ์ผ๋ก ๋๋ณธ๋ค.
for (int i = 0; i < iCnt; i++) {
// ์ฌ์ ๋ชจ๋ ์ขํ์์ ์์
for (Pair p : hs.get(i)) {
for (int dir = 0; dir < 4; dir++) { // ์ํ์ข์ฐ
Pair result = go(p.x, p.y, dir); // ๊ธธ์ด, ๋์ฐฉ ์ฌ
// ๋ค๋ฆฌ์ ๊ธธ์ด๊ฐ 2๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ฌ๋ผ๋ฆฌ ์ฐ๊ฒฐํ ๊ฒฝ์ฐ
if (result.x < 2 || result.y == i) {
continue;
}
// i๋ฒ์งธ ์ฌ์์ ๋์ฐฉ ์ฌ์ผ๋ก, x์ ๊ธธ์ด๋งํผ์ ๋ค๋ฆฌ ์์ฑ
pq.add(new Pair(i, result.y, result.x));
}
}
}
์ฌ์ ํด๋น ์ขํ์์ ๋์ ์ ์๋ ๋ค๋ฆฌ์ ๊ธธ์ด๊ฐ 2์ด์์ด๊ณ ์๊ธฐ ์์ ์ ์ฌ์ผ๋ก ๋ค๋ฆฌ๋ฅผ ๋์ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋์ค์ ๋ชจ๋ ์ฌ๋ค์ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ๋ฅผ ์ ํํ ๋ ์๋น ์ ํ์ง๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ queue์ ์ ์ฅํ๋ค.
3. ํฌ๋ฃจ์ค์นผ์ด๋ ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํด MST๋ฅผ ๋ง๋ค๊ณ ์ต์ ๋น์ฉ์ ์ถ๋ ฅํ๋ค.
์ฝ๋
์ฝ๋์ ๊ธธ์ด๊ฐ ๊ธธ์ด ์๋ตํ๋ค