메모리: 22900 KB, 시간: 220 ms
너비 우선 탐색, 깊이 우선 탐색, 그래프 이론, 그래프 탐색
2024년 8월 11일 01:19:43
인제대학교 생화학연구실에 재직중인 석교수는 전류가 침투(percolate) 할 수 있는 섬유 물질을 개발하고 있다. 이 섬유 물질은 2차원 M × N 격자로 표현될 수 있다. 편의상 2차원 격자의 위쪽을 바깥쪽(outer side), 아래쪽을 안쪽(inner side)라고 생각하기로 한다. 또한 각 격자는 검은색 아니면 흰색인데, 검은색은 전류를 차단하는 물질임을 뜻하고 흰색은 전류가 통할 수 있는 물질임을 뜻한다. 전류는 섬유 물질의 가장 바깥쪽 흰색 격자들에 공급되고, 이후에는 상하좌우로 인접한 흰색 격자들로 전달될 수 있다.
김 교수가 개발한 섬유 물질을 나타내는 정보가 2차원 격자 형태로 주어질 때, 바깥쪽에서 흘려 준 전류가 안쪽까지 침투될 수 있는지 아닌지를 판단하는 프로그램을 작성하시오.
첫째 줄에는 격자의 크기를 나타내는 M (2 ≤ M ≤ 1,000) 과 N (2 ≤ N ≤ 1,000) 이 주어진다. M줄에 걸쳐서, N개의 0 또는 1 이 공백 없이 주어진다. 0은 전류가 잘 통하는 흰색, 1은 전류가 통하지 않는 검은색 격자임을 뜻한다.
바깥에서 흘려준 전류가 안쪽까지 잘 전달되면 YES를 출력한다.
그렇지 않으면 NO를 출력한다.
풀이
상하좌우를 돌아보며 0을 발견하면 해당 칸으로 이동하면 된다.
그렇게 계속 이동하다 마지막 행에 도달하면 return을 시키면 된다.
전체 코드
public class Main {
static int N, M, x[][], check = 0;
static int X[] = {0,0,1,-1}, Y[] = {1,-1,0,0};
static boolean visited[][];
public static void main(String args[])throws IOException{
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());
visited = new boolean[N][M];
x = new int[N][M];
for (int i = 0; i < N; i++) {
String line = br.readLine();
for (int j = 0; j < M; j++) {
x[i][j] = line.charAt(j) - '0';
}
}
for(int i = 0 ;i<M;i++){
if(x[0][i] == 0){
dfs(0,i);
if(check == 1){
bw.write("YES");
bw.flush();
return;
}
}
}
bw.write("NO");
bw.flush();
}
public static void dfs(int now, int xx){
if(now == N-1){
check = 1;
return;
}
for(int j = 0; j<4;j++){
int x1 = xx + X[j];
int y1 = now + Y[j];
if(x1>=0 && x1 < M && y1 >= 0 && y1 < N){
if(x[y1][x1] == 0 && !visited[y1][x1]){
visited[y1][x1] = true;
dfs(y1,x1);
if(check == 1){
break;
}
}
}
}
}
}
'코딩 테스트 연습 > 백준' 카테고리의 다른 글
백준 14248번 점프 점프 (java) (0) | 2024.08.12 |
---|---|
백준 11725번 트리의 부모 찾기 (java) (0) | 2024.08.12 |
백준 10971번 외판원 순회 2 (java) (0) | 2024.08.10 |
백준 11724번 연결 요소의 개수 (java) (0) | 2024.08.09 |
백준 1012번 유기농 배추 (java) (0) | 2024.08.08 |