코드굽는 타자기
Jungol[1462] - 보물섬 본문
링크
문제설명
- BFS STEP계산
문제풀이
- 매 칸에서 BFS STEP MAX 갱신
문제코드
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Main1462 {
public static LinkedList<int[]> q = new LinkedList<>();
public static void DFS(int[] rc) {
int temp=0;
q.add(new int[] {rc[0],rc[1]});
visit[rc[0]][rc[1]]=true;
int[] now;
int qsize;
int nr=0;
int nc=0;
while(!q.isEmpty()) {
qsize=q.size();
for (int i = 0; i < qsize; i++) {
now = q.poll();
for (int d = 0; d < 4; d++) {
nr=now[0]+dir[d][0];
nc=now[1]+dir[d][1];
// 경계 안에서 다음칸이 이동가능하며, 방문안한 칸인 경우 탐색
if(nr>=0 && nr<R && nc>=0 && nc<C && map[nr][nc]=='L' && !visit[nr][nc]) {
q.add(new int[] {nr,nc});
visit[nr][nc]=true;
}
}
}
temp++;
}
Ans=Math.max(Ans, temp);
}
public static int[][] dir= {
{-1,0},
{1,0},
{0,-1},
{0,1}
};
public static int R;
public static int C;
public static char[][] map;
public static int Ans=0;
public static boolean[][] visit;
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("res/jungol/1462.txt"));
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();
}
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if(map[i][j]=='L') {
visit = new boolean[R][C];
DFS(new int[] {i,j});
}
}
}
System.out.println(Ans-1);
}
}
아쉬운점
- 전역변수 설정하고 로컬로 받아서 연산 안됬었음.
잘한점
- BFS STEP 계산
'알고리즘 > 깊이&너비 우선 탐색(DFS&BFS)' 카테고리의 다른 글
SWEA[1861] - 정사각형 방[D4] (0) | 2020.02.13 |
---|---|
SWEA[1949] - 등산로 조성 (0) | 2020.02.11 |
SWEA[1953] - 탈주범 검거 (0) | 2020.02.10 |
Jungol[1661] - 미로 탈출 로봇 (0) | 2020.02.10 |
Baekjoon[2667] - 단지번호붙이기 (0) | 2020.02.10 |
Comments