17129번: 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유 (acmicpc.net)
17129번: 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유
첫째 줄에 정보섬 2층의 크기 n과 m이 주어진다. (1 ≤ n,m ≤ 3000, 4 ≤ n×m ≤ 9×106) 이후 n행 m열에 걸쳐 0, 1, 2, 3, 4, 5로만 구성된 Ai,j가 주어진다. Ai,j와 Ai,j+1사이에 공백은 주어지지 않는다. 2,
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int[] dx= {0,1,0,-1};
static int[] dy= {1,0,-1,0};
static boolean[][] visit;
static int n,m;
static Queue<int[] > q;
static char[][] c;
static StringBuilder sb;
public static void main(String[] args) throws Exception{
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
q=new LinkedList<>();
visit=new boolean[n][m];
sb=new StringBuilder("");
c=new char[n][m];
for(int i=0;i<n;i++) {
String s=sc.next();
c[i]=s.toCharArray();
}
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(c[i][j]=='2') bfs(i,j,1);
}
}
if(sb.toString().equals("")) sb.append("NIE");
System.out.println(sb.toString());
}
static void bfs(int a, int b, int cc) {
q.add(new int[] {a,b,cc});
while(!q.isEmpty()) {
int[] x=q.poll();
for(int i=0;i<4;i++) {
int nx=x[0]+dx[i];
int ny=x[1]+dy[i];
if(nx<0 || nx>=n || ny<0 || ny>=m || visit[nx][ny] || c[nx][ny]=='1') continue;
if(c[nx][ny]=='3'|| c[nx][ny]=='4'|| c[nx][ny]=='5') {
sb.append("TAK\n");
sb.append(x[2]);
return;
}
visit[nx][ny]=true;
q.add(new int[] {nx,ny,x[2]+1});
}
}
}
}
'코테 공부' 카테고리의 다른 글
배열 돌리기 1(백준 16926번, 자바) (0) | 2023.02.15 |
---|---|
[SWEX] 암호문1(1228번, 자바)☆ (0) | 2023.02.14 |
Comparable, Comparator [인터페이스] (0) | 2023.02.10 |
소수 구하기!! (0) | 2023.02.10 |
[BFS] 공주님을 구해라!(백준 17836번, 자바)☆☆☆ (0) | 2023.02.09 |