import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int x; static int y; static int arr[][]; static int visit[][]; static Queueq; static int result; static int dx[]= {-1,0,1,0}; static int dy[] = {0,1,0,-1}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); x= sc.nextInt(); y= sc.nextInt(); arr= new int[x][y]; visit = new int[x][y]; result = 0; int count=0; q=new LinkedList(); for(int i=0;i<x;i++) { for(int j=0;j<y;j++) { arr[i][j]=sc.nextInt(); if(arr[i][j]==1) { count++; } } } boolean ch = true; int min=count; while(ch) { q.add(new pos(0,0)); visit[0][0]=1; check(); BFS(); int cnt=0; ch= false; for(int i=0;i<x;i++) { for(int j=0;j<y;j++) { if(arr[i][j]==1) { cnt++; } } } if(cnt!=0) { min=cnt; ch=true; } if(cnt==0) { break; } } System.out.println(result); System.out.println(min); } private static void BFS() { result++; while(!q.isEmpty()) { pos temp = q.poll(); for(int i=0;i<4;i++) { int rx= temp.x+dx[i]; int ry = temp.y+dy[i]; if(rx<0||ry<0||rx>=x||ry>=y) { continue; } //빈곳일경우 if(arr[rx][ry]==0&&visit[rx][ry]==0) { visit[rx][ry]=1; q.add(new pos(rx,ry)); }if(arr[rx][ry]==1) { visit[rx][ry]++; if(visit[rx][ry]>=1) { arr[rx][ry]=0; } } } } } private static void check() { for(int i=0;i<x;i++) { for(int j=0;j<y;j++) { visit[i][j]=0; } } } private static class pos{ int x; int y; pos(int x, int y){ this.x = x; this.y = y; } } }
'코딩테스트(백준)' 카테고리의 다른 글
[백준] 2178 : 미로탐색 -JAVA(자바) - 사좋배 공유 (0) | 2020.03.03 |
---|---|
[백준] 2638 : 치즈 -JAVA(자바) - 사좋배 공유 (0) | 2020.02.27 |
[백준] 1261 : 알고스팟 -JAVA - 사좋배 공유 (0) | 2020.02.27 |
[백준] 5014 : 스타트링크 - JAVA(자바) - 사좋배 공유 (0) | 2020.02.24 |
[백준] 1600 : 말이 되고픈 원숭이 -JAVA(자바) - 사좋배 공유 (0) | 2020.02.24 |