처음에 1단계에서 삭제할 블록을 찾는건 쉬웠지만
그 정보를 저장으==할 방법때문에 오래걸렸다.
bool[][] 로 저장하니까 나머지도 쉽게 찾았다.
class Solution {
final static int[][] dx = { { 0, 1, 1 }, { -1, -1, 0 }, { -1, -1, 0 }, { 0, 1, 1 } };
final static int[][] dy = { { 1, 0, 1 }, { 0, 1, 1 }, { 0, -1, -1 }, { -1, -1, 0 } };
static int delete(int n, int m) {
int delete_num = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if(map[i][j]!='-')
{
for (int k = 0; k < 4; k++) {
int ok=0;
for (int o = 0; o < 3; o++) {
int x = i + dx[k][o];
int y = j + dy[k][o];
if(x>=m || y>=n || x<0 || y<0) continue;
if(map[i][j]==map[x][y])
ok++;
}
if(ok==3)
{
delete_num++;
check[i][j] = true;
break;
}
}
}
}
}
return delete_num;
}
static void drop( int n, int m) {
while(true)
{
int num=0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if(map[i][j]=='-')
{
if(i-1<0)
map[i][j]='-';
else if(map[i-1][j]!='-'){
num++;
map[i][j]=map[i-1][j];
map[i-1][j]='-';
}
}
}
}
if(num==0)
break;
}
}
static boolean[][] check;
static char[][] map;
public int solution(int m, int n, String[] board) {
map = new char[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
map[i][j] = board[i].charAt(j);
}
}
int ans=0;
while(true) {
check = new boolean[m][n];
int temp = delete(n,m);
if(temp==0)
break;
ans+=temp;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if(check[i][j]==true)
map[i][j]='-';
}
}
drop(n,m);
}
return ans;
}
}