01-09 18:44
Recent Posts
Recent Comments
Tags
- API MarketPlace ๊ธ๋ก๋ฒ ์ํฌํฐ์ฆ
- ์๋์ด๋ ธ
- DATABASE
- python
- ict๊ณต๋ชจ์
- ์ด๋ธ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ์ด์ฌ
- ํ์ด์๊ณต๋ชจ์
- linux
- RaspberryPi
- ์จ์ผ๋ํ
- API๋ง์ผํ๋ ์ด์ค
- ICT๋ฉํ ๋ง
- ICT
- ํ๋ก๋ณด๋ ธ
- mysql
- ์กํ๊ณ
- Java
- appetizer
- ์๋ฐ
- ํ์ด์
- Spring
- SQL
- DB
- ์คํฝ์ค๋น
- Naver Cloud
- ์คํฝ๋ ํ
- JOBํ๊ณ
- TSQL
- Today
- Total
miinsun
[BAEKJOON] ๋ฐฑ์ค ๊ทธ๋ํ 2146 :: ๋ค๋ฆฌ ๋ง๋ค๊ธฐ ๋ณธ๋ฌธ
๐ฌ ๋ฌธ์ ์ค๋ช
์ฌ๋ฌ ์ฌ์ผ๋ก ์ด๋ฃจ์ด์ง ๋๋ผ๊ฐ ์๋ค. ์ด ๋๋ผ์ ๋ํต๋ น์ ์ฌ์ ์๋ ๋ค๋ฆฌ๋ฅผ ๋ง๋ค๊ฒ ๋ค๋ ๊ณต์ฝ์ผ๋ก ์ธ๊ธฐ๋ชฐ์ด๋ฅผ ํด ๋น์ ๋ ์ ์์๋ค.
ํ์ง๋ง ๋ง์ ๋ํต๋ น์ ์ทจ์ํ์, ๋ค๋ฆฌ๋ฅผ ๋๋๋ค๋ ๊ฒ์ด ์๊น๋ค๋ ์๊ฐ์ ํ๊ฒ ๋์๋ค.
๊ทธ๋์ ๊ทธ๋, ์์๋ด๋ ์์ผ๋ก ํ ์ฌ๊ณผ ๋ค๋ฅธ ์ฌ์ ์๋ ๋ค๋ฆฌ ํ๋๋ง์ ๋ง๋ค๊ธฐ๋ก ํ์๊ณ ,
๊ทธ ๋ํ ๋ค๋ฆฌ๋ฅผ ๊ฐ์ฅ ์งง๊ฒ ํ์ฌ ๋์ ์๋ผ๋ ค ํ์๋ค.
์ด ๋๋ผ๋ N×Nํฌ๊ธฐ์ ์ด์ฐจ์ ํ๋ฉด์์ ์กด์ฌํ๋ค. ์ด ๋๋ผ๋ ์ฌ๋ฌ ์ฌ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ฌ์ด๋ ๋์๋จ๋ถ์ผ๋ก ์ก์ง๊ฐ ๋ถ์ด์๋ ๋ฉ์ด๋ฆฌ๋ฅผ ๋งํ๋ค. ๋ค์์ ์ธ ๊ฐ์ ์ฌ์ผ๋ก ์ด๋ฃจ์ด์ง ๋๋ผ์ ์ง๋์ด๋ค.
์์ ๊ทธ๋ฆผ์์ ์์ด ์๋ ๋ถ๋ถ์ด ์ก์ง์ด๊ณ , ์์ด ์๋ ๋ถ๋ถ์ด ๋ฐ๋ค์ด๋ค. ์ด ๋ฐ๋ค์ ๊ฐ์ฅ ์งง์ ๋ค๋ฆฌ๋ฅผ ๋์ ๋ ๋๋ฅ์ ์ฐ๊ฒฐํ๊ณ ์ ํ๋ค. ๊ฐ์ฅ ์งง์ ๋ค๋ฆฌ๋, ๋ค๋ฆฌ๊ฐ ๊ฒฉ์์์ ์ฐจ์งํ๋ ์นธ์ ์๊ฐ ๊ฐ์ฅ ์์ ๋ค๋ฆฌ๋ฅผ ๋งํ๋ค.
๋ค์ ๊ทธ๋ฆผ์์ ๋ ๋๋ฅ์ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ๋ฅผ ๋ณผ ์ ์๋ค.
๋ฌผ๋ก ์์ ๋ฐฉ๋ฒ ์ธ์๋ ๋ค๋ฆฌ๋ฅผ ๋๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ ๊ฐ์ง ์์ผ๋,
์์ ๊ฒฝ์ฐ๊ฐ ๋๋ ๋ค๋ฆฌ์ ๊ธธ์ด๊ฐ 3์ผ๋ก ๊ฐ์ฅ ์งง๋ค(๋ฌผ๋ก ๊ธธ์ด๊ฐ 3์ธ ๋ค๋ฅธ ๋ค๋ฆฌ๋ฅผ ๋์ ์ ์๋ ๋ฐฉ๋ฒ๋ ๋ช ๊ฐ์ง ์๋ค).
์ง๋๊ฐ ์ฃผ์ด์ง ๋, ๊ฐ์ฅ ์งง์ ๋ค๋ฆฌ ํ๋๋ฅผ ๋์ ๋ ๋๋ฅ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ์์ค.
๐จ ์ ์ถ๋ ฅ ์
์ ๋ ฅ
- ์ฒซ ์ค์๋ ์ง๋์ ํฌ๊ธฐ N(100์ดํ์ ์์ฐ์)๊ฐ ์ฃผ์ด์ง๋ค.
- ๊ทธ ๋ค์ N์ค์๋ N๊ฐ์ ์ซ์๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ฉฐ, 0์ ๋ฐ๋ค, 1์ ์ก์ง๋ฅผ ๋ํ๋ธ๋ค.
- ํญ์ ๋ ๊ฐ ์ด์์ ์ฌ์ด ์๋ ๋ฐ์ดํฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
- ์ฒซ์งธ ์ค์ ๊ฐ์ฅ ์งง์ ๋ค๋ฆฌ์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1)
10
1 1 1 0 0 0 0 1 1 1
1 1 1 1 0 0 0 0 1 1
1 0 1 1 0 0 0 0 1 1
0 0 1 1 1 0 0 0 0 1
0 0 0 1 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0
์์ ์ถ๋ ฅ 1)
3
โ
๐ป Main.java
- DFS์ BFS ๋์ ํ์ฉํด ํ์ดํ ์ ์์๊ฑฐ ๊ฐ์ง๋ง, ์๊ฐ ํจ์จ์ ์ํด BFS๋ฅผ ์ด์ฉํ๊ธฐ๋ก ํ๋ค.
- ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ํฌ๊ฒ 2๊ฐ์ง ์ ์ฐจ๋ก ์ ๊ทผํ๋ค.
- ๊ฐ์ ๋
๋ฆฝ๋ ์ฌ์ผ๋ก ๋ํ๋ด๊ธฐ
- ๊ฐ ๊ฐ์ ์ฌ์ 1,2,3...์ผ๋ก ๋๋ฒ๋งํด์ฃผ์
- ๊ธฐ์กด์ BFS๋ฌธ์ ๋ค๊ณผ ์ ์ฌํ๊ฒ ์ด๊ฑด ์ฝ๊ฒ ๋ง๋ค ์ ์์๋ค.
- ๋
๋ฆฝ๋ ์ฌ๊ณผ ์ฌ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ด๊ธฐ
- ์ด๊ฑธ ๊ตฌํํ๊ธฐ๊ฐ ์ด๋ ค์์ ํ ์ ์์ด ๊ตฌ๊ธ๋ง์ ํ๋ค.
- Point์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ด๋ ๋ณ์๋ฅผ ์ถ๊ฐํด์ ๊ฐ ์ฌ์ฌ์ด์ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์์๋ค.
- ๊ผญ for๋ฌธ์ ์์ํ ๋๋ง๋ค. check[]๋ฅผ ์ด๊ธฐํํด์ฃผ์. (์ฐจ๋ง ์๊ฐํ์ง ๋ชปํด์ ์ฐพ๋๋ฐ ์ค๋๊ฑธ๋ ธ๋ค..)
- ๊ฐ์ ๋
๋ฆฝ๋ ์ฌ์ผ๋ก ๋ํ๋ด๊ธฐ
/* ๋ฐฑ์ค ๊ทธ๋ํ - 2146 :: ๋ค๋ฆฌ ๋ง๋ค๊ธฐ */
import java.util.*;
import java.io.*;
class Point {
public int x, y, cnt;
Point (int x, int y, int cnt){
this.x = x;
this.y = y;
this.cnt = cnt;
}
}
public class Main {
static int[][] board, map;
static int n;
// ์ธ์ ํ ์นธ(์ข์ฐ ์ ์๋) ์ขํ ์ ๋ณด
static int[] dx = {-1, 0, 1, 0};
static int[] dy = {0, -1, 0, 1};
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
board = new int[n][n];
map = new int[n][n];
for(int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0; j < n; j++) {
board[i][j] = Integer.parseInt(st.nextToken());
}
}
Queue<Point> q = new LinkedList<>();
int order = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
// ๊ฐ๊ฐ์ ์ฌ ๋ฐฉ
if(board[i][j] == 1) {
q.offer(new Point(i, j, 0));
board[i][j] = 0;
// ์ฌ์ ๋ฐฉ๋ฌธ ํ ๋๋ง๋ค ์ฌ์ ์์ ์ฆ๊ฐ
order++;
map[i][j] = order;
while(!q.isEmpty()) {
Point tmp = q.poll();
for(int k = 0; k < 4; k++) {
int nx = tmp.x + dx[k];
int ny = tmp.y + dy[k];
// ๊ฒฝ๊ณ์ ๊ฒ์ฌ
if(nx >= 0 && nx <= n - 1 && ny >= 0 && ny <= n - 1 && board[nx][ny] == 1) {
board[nx][ny] = 0;
q.offer(new Point(nx, ny, 0));
map[nx][ny] = order;
}
}
}
}
}
}
int answer = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (map[i][j] >= 1) {
boolean[][] check = new boolean[n][n];
Queue<Point> queue = new LinkedList<Point>();
queue.offer(new Point(i, j, 0));
check[i][j] = true;
while (!queue.isEmpty()) {
Point point = queue.poll();
for (int k = 0; k < 4; k++) {
int nx = point.x + dx[k];
int ny = point.y + dy[k];
if (nx >= 0 && nx < n && ny >= 0 && ny < n && !check[nx][ny] && map[nx][ny] != map[i][j]) {
check[nx][ny] = true;
if (map[nx][ny] == 0) { //๋ฐ๋ค
queue.offer(new Point(nx, ny, point.cnt + 1));
} else { //๋ค๋ฅธ ์ฌ
answer = Math.min(answer, point.cnt);
}
}
}
}
}
}
}
System.out.println(answer);
br.close();
return ;
}
}
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON] ๋ฐฑ์ค ๊ทธ๋ํ 11725:: ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ (0) | 2022.04.05 |
---|---|
[BAEKJOON] ๋ฐฑ์ค ๊ทธ๋ํ1991 :: ํธ๋ฆฌ ์ํ (0) | 2022.04.04 |
[BAEKJOON] ๋ฐฑ์ค ๊ทธ๋ํ 2178 :: ๋ฏธ๋ก ํ์ (0) | 2022.04.03 |
[BAEKJOON] ๋ฐฑ์ค ๊ทธ๋ํ 7576 :: ํ ๋งํ (0) | 2022.04.02 |
[BAEKJOON] ๋ฐฑ์ค ๊ทธ๋ํ 4963 :: ์ฌ์ ๊ฐ์ (0) | 2022.04.02 |
Comments