https://www.acmicpc.net/problem/6146
6146번: 신아를 만나러
키파는 신아를 만나러 아침 일찍(무려 6시에!) 일어났다. 간밤에 거센 비가 내려서 새로 산 장화를 신고 (0, 0)에 있는 집을 나선 키파는 무려 N(1 ≤ N ≤ 104)개의 웅덩이가 있는 것을 보고 놀랐다.
www.acmicpc.net
저는 BFS를 통해 문제를 해결했습니다.
음수의 좌표는 500을 더해 음수를 없애고 좌표를 표시하여 문제를 해결했습니다.
package BOJ.bfs;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_6146 {
private static final int SIZE = 500;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Function<String, Integer> stoi = Integer::parseInt;
StringTokenizer st = new StringTokenizer(br.readLine());
int x = stoi.apply(st.nextToken()) + SIZE;
int y = stoi.apply(st.nextToken()) + SIZE;
int n = stoi.apply(st.nextToken());
boolean[][] isBlock = new boolean[2 * SIZE + 1][2 * SIZE + 1];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int a = stoi.apply(st.nextToken()) + SIZE;
int b = stoi.apply(st.nextToken()) + SIZE;
isBlock[b][a] = true;
}
int result = cal(y, x, isBlock);
System.out.println(result);
}
private static final int[] DY = {-1, 0, 1, 0};
private static final int[] DX = {0, 1, 0, -1};
private static int cal(int y, int x, boolean[][] isBlock) {
Queue<int[]> q = new LinkedList<>();
q.offer(new int[]{SIZE, SIZE});
int time = 0;
boolean[][] visited = new boolean[2*SIZE+1][2*SIZE+1];
while (!q.isEmpty()) {
int size = q.size();
for (int s = 0; s < size; s++) {
int[] now = q.poll();
if (now[0] == y && now[1] == x) {
return time;
}
for (int i = 0; i < 4; i++) {
int ny = now[0] + DY[i];
int nx = now[1] + DX[i];
if(ny >= 0 && ny <= 2*SIZE && nx >= 0 && nx <= 2*SIZE && !isBlock[ny][nx] && !visited[ny][nx]){
visited[ny][nx] = true;
q.offer(new int[]{ny,nx});
}
}
}
time++;
}
return -1;
}
}
'알고리즘' 카테고리의 다른 글
백준 2839번 설탕 배달 (JAVA) (0) | 2023.06.23 |
---|---|
프로그래머스 베스트앨범 (JAVA) (0) | 2023.06.22 |
백준 21937번 작업 (JAVA) (0) | 2023.06.20 |
백준 11403번 경로 찾기 (JAVA) (0) | 2023.06.19 |
백준 25634번 전구 상태 뒤집기 (JAVA) (0) | 2023.06.18 |