https://www.acmicpc.net/problem/14940
[정답코드]
import java.io.*;
import java.util.*;
public class Main {
static int[][] graph;
static boolean[][] visited;
static int[][] result;
static int n, m;
static int[] dx = {-1, 1, 0, 0}; // 상,하,좌,우
static int[] dy = {0, 0, -1, 1};
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
graph = new int[n][m];
visited = new boolean[n][m];
result = new int[n][m];
int x=0, y=0;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < m; j++) {
graph[i][j] = Integer.parseInt(st.nextToken());
if (graph[i][j] == 2) {
x = i;
y = j;
} else if (graph[i][j] == 0) {
visited[i][j] = true;
}
}
}
bfs(x, y);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (!visited[i][j]) {
result[i][j] = -1;
}
System.out.print(result[i][j] + " ");
}
System.out.println();
}
}
public static void bfs(int x, int y) {
Queue<int[]> queue = new LinkedList<>();
queue.add(new int[]{x, y});
visited[x][y] = true;
while (!queue.isEmpty()) {
int tmp[] = queue.poll();
for (int i = 0; i < 4; i++) {
int nx = tmp[0] + dx[i];
int ny = tmp[1] + dy[i];
if (nx >= 0 && nx < n && ny >= 0 && ny < m) {
if (!visited[nx][ny] && graph[nx][ny] == 1) {
visited[nx][ny] = true;
result[nx][ny] = result[tmp[0]][tmp[1]] + 1;
queue.add(new int[]{nx, ny});
}
}
}
}
}
}
[설명]
bfs를 활용해야하는 문제이다. 시작지점의 위치를 입력받고 입력받은 위치를 큐에 넣고 bfs로직을 돌려준다.
bfs로직은 입력받은 x, y 를 큐에 넣고 해당 위치를 기준으로 4방탐색을 한다. 4방탐색을 했을 때 방문하지않은장소이고, 갈 수 있는 장소이고, 지도 내에 있다면 visited를 true로 변경해주고, 새로 탐색한 위치의 값을 이동할 때 마다 1씩 증가시켜준다. 그리고 새로탐색한 위치를 큐에 넣어준다.
'코딩테스트' 카테고리의 다른 글
백준 5972번: 택배 배송[JAVA] (0) | 2024.03.05 |
---|---|
백준 14719번: 빗물[JAVA] (0) | 2024.03.05 |
백준 1072번: 게임[JAVA] (0) | 2024.02.15 |
백준 1920번: 수 찾기[JAVA] (0) | 2024.02.14 |
백준 2512번: 예산[JAVA] (1) | 2024.02.13 |