๋ฌธ์
https://www.acmicpc.net/problem/16197
๋ด ๋ฌธ์ ํ์ด
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
static int n, m;
static char[][] board;
static Deque<int[]> que;
static int[] dx = {0, 0, -1, 1};
static int[] dy = {-1, 1, 0, 0};
public static int bfs() {
mainLoop:
while(true) {
int[] coin1 = que.removeFirst();
int[] coin2 = que.removeFirst();
if(coin1[2] > 10) break;
for(int i = 0; i < 4; i++) {
int nx1 = coin1[0] + dx[i];
int ny1 = coin1[1] + dy[i];
int nx2 = coin2[0] + dx[i];
int ny2 = coin2[1] + dy[i];
// ๋์ ์ด ๋ ๋ค ๋๊ฐ๋ ๊ฒฝ์ฐ
if((nx1 < 0 || ny1 < 0 || nx1 >= n || ny1 >= m) && (nx2 < 0 || ny2 < 0 || nx2 >= n || ny2 >= m)) continue;
// ๋์ ์ด ํ๋๋ง ๋๊ฐ๋ ๊ฒฝ์ฐ
if(((nx1 < 0 || ny1 < 0 || nx1 >= n || ny1 >= m) && (nx2 >= 0 && ny2 >= 0 && nx2 < n && ny2 < m)) ||
((nx1 >= 0 && ny1 >= 0 && nx1 < n && ny1 < m) && (nx2 < 0 || ny2 < 0 || nx2 >= n || ny2 >= m))) return coin1[2];
if(board[nx1][ny1] == '#') que.add(new int[]{coin1[0], coin1[1], coin1[2]+1});
else que.add(new int[]{nx1, ny1, coin1[2]+1});
if(board[nx2][ny2] == '#') que.add(new int[]{coin2[0], coin2[1], coin2[2]+1});
else que.add(new int[]{nx2, ny2, coin2[2]+1});
}
}
return -1;
}
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(in.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
board = new char[n][m];
que = new ArrayDeque<>();
for(int i = 0; i < n; i++) {
String now = in.readLine();
for(int j = 0; j < m; j++) {
board[i][j] = now.charAt(j);
if(now.charAt(j) == 'o') que.add(new int[]{i, j, 1}); // x์ขํ, y์ขํ, ๋ฒํผ ํด๋ฆญ ํ์ ์นด์ดํธ
}
}
System.out.println(bfs());
}
}
๐ BFS ๋ฌธ์
์ด ๋ฌธ์ ๋ ๋ ๊ฐ์ ๋์ ์ด ํ ๋ฒ์ ์์ง์ฌ์ผ ํ๋ค๋ ์ ,
๊ทธ๋ฆฌ๊ณ ๋ฑ ํ๋์ ๋์ ๋ง ๋จ์ด์ ธ์ผ ํ๋ค๋ ์ ๋ง ์ ๊ณ ๋ คํด์ฃผ๋ฉด ๋๋ ๋ฌธ์ !
- ๋์ ์ด ๋ ๋ค ๋๊ฐ๋ ๊ฒฝ์ฐ์๋ ํด๋น ํ์์ ํ์ง ์๋๋ก ํ๋ค.
- ๋์ ์ด ๋ ์ค ํ๋๋ง ๋๊ฐ๋ ๊ฒฝ์ฐ์๋ ํด๋น ํ์์ ์นด์ดํ
์ ๋ฆฌํดํ์ฌ ๋ฉ์๋๋ฅผ ์ข
๋ฃํ๋ค.
=> ๊ฐ์ฅ ์ฒ์ ๋ฆฌํด๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ๋ก ์ต์๋ก ๋ฒํผ์ ๋๋ฅด๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก! - ๋ฒฝ์ ๋ง๋ ๊ฒฝ์ฐ์๋, ๋ฒฝ์ ๋ง๋ ๋์ ๋ง ์์ง์ด์ง ์๋๋ก ํด์ฃผ์๋ค.
=> ๋ฒฝ์ ๋ง๋๋ ์นด์ดํ ์ ๊ทธ๋๋ก ์ฆ๊ฐ!!
๐ก ํผ๋๋ฐฑ
- ๋ฐ์ ๊ฐ๋ฅํ ์์ธ๋ฅผ ์ ๊ณ ๋ คํด์ฃผ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ !
'2๏ธโฃ Java > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java Algorithm] ๋์ฅ๊ณ JUNGOL #1828 (0) | 2022.08.16 |
---|---|
[Java Algorithm] ์ํ๋ฒณ BOJ #1987 (0) | 2022.08.16 |
[Java Algorithm] ์จ๋ฐ๊ผญ์ง 2 BOJ #12851 (0) | 2022.08.16 |
[Java Algorithm] ์ฌ์น์ฐ์ฐ ์ ํจ์ฑ ๊ฒ์ฌ SWEA #1233 (0) | 2022.08.11 |
[Java Algorithm] ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 4 BOJ #17406 (0) | 2022.08.10 |
๋๊ธ