[백준] 2636. 치즈 (bfs, java)
728x90
반응형
공기랑 닿는 부분 (처음 0,0 좌표에서 시작해서 0인 부분(처음 공기인 부분)과 -1(치즈가 녹아 공기가 된 부분)을 공기로 체크해준다. (공기: -1)
공기와 만나는 치즈는 녹을 치즈(2)로 만들어준다.
2의 개수를 세고 치즈를 모두 녹여준다(-1로 만들어줌)
만약 1인 치즈가 있으면 반복한다.
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Pos{
int y;
int x;
public Pos(int y, int x) {
super();
this.y = y;
this.x = x;
}
}
public class B_2636_치즈_Main {
static int n,m;
static int[][] map;
static boolean vis[][];
static int xpos[]= {0,0,1,-1};
static int ypos[]= {1,-1,0,0};
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
map=new int[n][m];
vis=new boolean[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j <m; j++) {
map[i][j]=sc.nextInt();
}
}
int time=0;
int answer=0;
while(true) {
if(isEmpty()) {
break;
}
for (int i = 0; i < n; i++) {
Arrays.fill(vis[i], false);
}
check();
for (int i = 0; i < n; i++) {
Arrays.fill(vis[i], false);
}
answer=melt();
time++;
}
System.out.println(time);
System.out.println(answer);
}
private static int melt() {
int cnt=0;
for (int i = 0; i < n; i++) {
for (int j = 0; j <m; j++) {
if(map[i][j]==2) {
map[i][j]=-1;//녹아서 공기가 된 치즈
cnt+=1;
}
}
}
return cnt;
}
private static void check() {
Queue<Pos> q=new LinkedList<Pos>();
q.add(new Pos(0,0));
vis[0][0]=true;
map[0][0]=-1;//공기
while(q.size()!=0) {
Pos cur=q.poll();
int y=cur.y;
int x=cur.x;
for (int i = 0; i < 4; i++) {
int yy=y+ypos[i];
int xx=x+xpos[i];
if(xx<0 || yy<0 || xx>=m || yy>=n)continue;
if(vis[yy][xx])continue;
if(map[yy][xx]==0 || map[yy][xx]==-1) { //이미 공기인 부분과 새로 녹은 부분 모두 공기
vis[yy][xx]=true;
q.add(new Pos(yy,xx));
}else {
map[yy][xx]=2; //녹을 치즈 부분
}
}
}
}
private static boolean isEmpty() {
for (int i = 0; i < n; i++) {
for (int j = 0; j <m; j++) {
if(map[i][j]==1)return false;
}
}
return true;
}
}
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 9205번 맥주 마시면서 걸어가기 (java, 플로이드 와샬) (0) | 2021.03.25 |
---|---|
[백준] 12015번 가장 긴 증가하는 부분 수열2 (JAVA, 이분탐색 binary search) (0) | 2021.03.25 |
[백준] 1600번 말이 되고픈 원숭이 (java, bfs) (0) | 2021.03.24 |
[백준] 17086번. 아기 상어2 (bfs, java) (0) | 2021.03.24 |
[백준] 16236번 아기 상어 (bfs, java) (0) | 2021.03.24 |
TAGS.