문제 : www.acmicpc.net/problem/2589
2589번: 보물섬
보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서
www.acmicpc.net
문제 유형 : BFS
풀이방식 : 육지인 지점 마다 BFS 탐색하여 최대 LEVEL 측정
소스코드
package BOJ;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ_2589_보물섬_Main {
private static int result;
private static int r;
private static int c;
private static char[][] map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
map = new char[r][c];
for (int i = 0; i < r; i++) {
map[i] = br.readLine().toCharArray();
}
result = 0;
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if(map[i][j]=='L') {
bfs(i,j);
}
}
}
System.out.println(result);
}
private static void bfs(int i, int j) {
Queue<int[]> q = new LinkedList<int[]>();
q.offer(new int[] {i, j});
boolean[][] visited = new boolean[r][c];
int count = 0;
int[] dr = {0,0,1,-1}, dc = {1,-1,0,0};
visited[i][j] = true;
while(!q.isEmpty()) {
int size = q.size();
boolean flag = false;
for (int s = 0; s < size; s++) {
int[] cur = q.poll();
for (int d = 0; d < 4; d++) {
int nr = cur[0] + dr[d];
int nc = cur[1] + dc[d];
if(nr>-1&&nc>-1&&nr<r&&nc<c&&!visited[nr][nc]&&map[nr][nc]=='L') {
flag = true;
visited[nr][nc] = true;
q.offer(new int[] {nr,nc});
}
}
}
if(!flag) break;
count++;
}
if(count>result) result = count;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA]백준_1743_음식물피하기 (0) | 2021.01.29 |
---|---|
[JAVA]백준_5014_스타트링크 (0) | 2021.01.28 |
[JAVA]백준_5427_불 (0) | 2021.01.25 |
[JAVA]백준_1260_DFS와BFS (0) | 2021.01.24 |
[JAVA]백준_13335_트럭 (0) | 2021.01.20 |