๋ชฉ์ฐจ
1. ๋ฌธ์ ์ค๋ช
2. ๋ด๊ฐ ํผ ๋ฐฉ๋ฒ
3. ์ฝ๋ ๋ถ์
1. ๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/2589
์ก์งํ๊ณ ๋ฐ๋ค๊ฐ ์๋๋ฐ, ํด์ ์ ์ก์ง๋ก๋ง ๊ฐ ์ ์๋ค.
์ก์ง๋ ์ธ์ ํ ์ ์๊ณ , ํด์ ์ ๋๊ฐ์ ์ ์ ์ธํ ์ฌ๋ฐฉ์ผ๋ก๋ง ์์ง์ผ ์ ์๋ค.
๋ณด๋ฌผ์ ํด์ ์ด ๊ฑธ์ด์ ๊ฐ ์ ์๋ ์ก์ง ์์ ๊ฐ์ฅ ๊ฑฐ๋ฆฌ๊ฐ ๊ธด ์ก์ง๋
ธ๋์ ๊ฐ๊ฐ ์กด์ฌํ๋๋ฐ, ์ด๋, ๋ณด๋ฌผ 2๊ฐ๋ฅผ ์ฐพ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ์์ค.
2. ๋ฌธ์ ํผ ์๋ฆฌ ์ค๋ช
2์ฐจ์ ๋ฐฐ์ด์ ๋๋ฉด์ ์ก์ง๋ฅผ ๋ง๋๋ฉด ๊ฑฐ๊ธฐ์๋ถํฐ ์ธ์ ํ ๋ ธ๋๋ฅผ ๋๋ฉด์ ํด๋น ์ก์ง๋ ๊ฑฐ๋ฆฌ๊ฐ ์ผ๋ง๋ ๋จผ์ง BFS๋ก ์ฒดํฌ, ๊ฑฐ๊ธฐ์ ์ก์ง๊ฐ์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ธด ๊ฒฝ์ฐ์ ๊ทธ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int W,H;
// ์ก์ง(L) == 0, ๋ฐ๋ค(W) == -1, ๋๋จธ์ง ๊ฐ == ์์์ ์ผ๋ก๋ถํฐ ๊ฑธ๋ฆฐ ํ์
static int [][] land;
static int [] idx = {-1,0,1,0};
static int [] idy = {0,1,0,-1};
public static void main(String[] args) throws IOException {
// 0. ์
๋ ฅ ๋ฐ๊ธฐ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
ArrayList<Integer> HourList = new ArrayList<>();
W = Integer.parseInt(st.nextToken());
H = Integer.parseInt(st.nextToken());
land = new int[W][H];
for (int i = 0; i < W; i++) {
String s = br.readLine();
for (int j = 0; j < H; j++) {
if(s.charAt(j) == 'W'){
land[i][j] = -1; // ๋ฐ๋ค
} else if (s.charAt(j) == 'L') {
land[i][j] = 0; // ์ก์ง
}
}
}
for (int i = 0; i < W; i++) {
for (int j = 0; j < H; j++) {
if(land[i][j] == 0){
HourList.add(BFS(i,j));
}
}
}
Collections.sort(HourList);
System.out.println(HourList.get(HourList.size()-1));
}
// ์ก์ง์ธ ๊ฒฝ์ฐ์๋ง ๊ฐ์ด ๋ค์ด์จ๋ค.
static int BFS(int x, int y) {
int moveCnt = 0;
land[x][y] = -999;
ArrayDeque<Coordinate1> aq1 = new ArrayDeque<>();
aq1.add(new Coordinate1(x,y));
while(!aq1.isEmpty()){
// ํ ํด์ +1์ฉ moveCnt๋ฅผ ์ฌ๋ฆฐ๋ค.
moveCnt ++;
int Qsize = aq1.size();
for (int k = 0; k < Qsize; k++) {
Coordinate1 now = aq1.poll();
for (int i = 0; i < 4; i++) {
int nx = now.x + idx[i];
int ny = now.y + idy[i];
// (1) ๊ทธ๋ํ ์์ ํฌํจ๋๊ณ
if(nx >=0 && ny >= 0 && nx < W && ny < H){
// (2) ๋ฐ๋ค๊ฐ ์๋๋ผ๋ฉด
if(land[nx][ny] == 0){
land[nx][ny] = moveCnt;
aq1.add(new Coordinate1(nx,ny));
}
}
}
}
}
// BFS ๊ฒ์ฌ๋ก ๋๋ฝํ์ง ๋ฐฐ์ด์ ๊นจ๋ํ๊ฒ ๋๋ ค๋๋๋ค.
for (int i = 0; i < W; i++) {
for (int j = 0; j < H; j++) {
if(land[i][j] != 0 && land[i][j] !=-1){
land[i][j] = 0;
}
}
}
// ์ด BFS๊ฐ ๋๋๊ณ ๋๋ฉด moveCnt์๋ ์ต์ฅ moveCnt๊ฐ ๋จ๋๋ค.
return moveCnt-1;
}
}
class Coordinate1 {
int x;
int y;
public Coordinate1 (int x, int y) {
this.x = x;
this.y = y;
}
}
0