반응형
[광고 누르면 오늘의 행운 상승!!]
https://www.acmicpc.net/problem/11559
밑으로 떨어지기 , 폭발하기를 구별하여서 구현하였다.
4개 이상 붙어있어야 폭발하기 때문에 q에 4개 이상 있을 때만 폭발시켰다.
import java.io.*;
import java.util.*;
public class Main {
public static final int[] dx = {-1,0,1,0};
public static final int[] dy = {0,1,0,-1};
public static boolean visit[][];
public static final int R = 12,C = 6;
public static char[][] map;
public static Queue<int[]> q;
public static Queue<int[]> nq;
public static int boom=0;
public static boolean flag;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
map = new char[R][C];
q = new LinkedList<>();
nq = new LinkedList<>();
for (int i = 0; i < R; i++) {
char[] ch = br.readLine().toCharArray();
for (int j = 0; j < C; j++) {
map[i][j] = ch[j];
}
}
while(!flag) {
Drop();
flag = Explode();
}
System.out.println(boom);
}
private static boolean Explode() {
visit = new boolean[R][C];
boolean flag = true;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if(map[i][j] != '.' && !visit[i][j]) {
visit[i][j] = true;
q.add(new int[] {i,j});
nq.add(new int[] {i,j});
int n = bfs(map[i][j]);
if(n>3) {
while(!nq.isEmpty()) {
int[] bbu = nq.poll();
map[bbu[0]][bbu[1]] = '.';
}
flag = false;
}else {
nq.clear();
}
}
}
}
if(!flag) boom++;
return flag;
}
private static int bfs(char Color) {
while(!q.isEmpty()) {
int[] bbuyo = q.poll();
for (int i = 0; i < 4; i++) {
int nx = bbuyo[0] + dx[i];
int ny = bbuyo[1] + dy[i];
if(check(nx, ny) && map[nx][ny] == Color) {
if(!visit[nx][ny]) {
visit[nx][ny] = true;
nq.add(new int[] {nx,ny});
q.add(new int[] {nx,ny});
}
}
}
}
return nq.size();
}
private static boolean check(int nx, int ny) {
return nx >= 0 && nx < R && ny >= 0 && ny < C;
}
private static void Drop() {
while(true) {
//아래부터 검사
int cnt = 0;
for (int i = R-1; i >= 0; i--) {
for (int j = 0; j < C; j++) {
if(map[i][j] == '.') continue;
int nx = i + dx[2];
if(nx < R && map[nx][j] == '.') {
map[nx][j] = map[i][j];
map[i][j] = '.';
cnt++;
}
}
}
if(cnt == 0) break;
}
}
}
반응형
'2. 알고리즘사이트 > 1. 백준' 카테고리의 다른 글
프린터 큐 [백준 1966][실버3][Java] (1) | 2020.03.03 |
---|---|
괄호의 값 [백준 2504][실버2][Java] (0) | 2020.03.03 |
색종이 올려놓기 [백준 2643][골드4][Java] (0) | 2020.03.02 |
양치기 꿍 [백준 3187][실버2][Java] (0) | 2020.03.02 |
달이 차오른다, 가자. [백준 1194][골드1][Java] (0) | 2020.03.02 |