https://school.programmers.co.kr/learn/courses/30/lessons/17679
구현량이 너무 많다 예외처리 신경쓸것도 너무 많고
어떻게 구현해야할지 고민하다가 시간이 다간다;;
알파벳은 숫자로 변환하였다
이차원 int 배열로 받았다
while문 돌면서 지울게 없을때 멈춘다
이차원배열 돌리면서
2x2 찾고 지우는 처리하고 재배열 처리한다
import java.util.*;
class Solution {
public int solution(int m, int n, String[] board) {
int answer = 0;
int[][] pan = new int[m][n];
int[][] delpan = new int[m][n];
for(int i = 0; i < m; ++i)
{
for(int j = 0;j < n; ++j)
{
pan[i][j] = board[i].charAt(j)-'A';
}
}
int[][] dir = {{0, 1},{1, 0},{1, 1}};//r, d, rd
while(true)//더 지워질게 없을때까정 반복
{
//delpan 에 지워질 대상 기록
for(int i = 0; i < m; ++i)
{
for(int j = 0;j < n; ++j)
{
if(pan[i][j] == -1)//빈공간
continue;
boolean twobytwo = true;//2x2 있나?
for(int k = 0; k < 3; ++k)
{
int row = i+dir[k][0];
int col = j+dir[k][1];
if(row >= m || col >= n)
{
twobytwo = false;
break;
}
if(pan[i][j] != pan[row][col])
{
twobytwo = false;
break;
}
}
if(twobytwo)
{
delpan[i][j] = -1;
for(int k = 0; k < 3; ++k)
{
int row = i+dir[k][0];
int col = j+dir[k][1];
delpan[row][col] = -1;
}
}
}
}
//pan 으로 delpan을 복사
boolean existDel = false;
for(int i = 0; i < m; ++i)
{
for(int j = 0;j < n; ++j)
{
if(delpan[i][j] == -1)
{
pan[i][j] = -1;
delpan[i][j] = 0;
existDel = true;
}
}
}
if(false == existDel)//2x2가 없으면 종료
{
//지워진 개수
for(int i = 0; i < m; ++i)
{
for(int j = 0;j < n; ++j)
{
if(-1 == pan[i][j])
answer++;
}
}
break;
}
//재배열
for(int i = m-1; i > m-2; --i)
{
for(int j = 0;j < n; ++j)
{
int down = i;
int up = down;
while(up >= 0)
{
if(pan[up][j] == -1)
{
up--;
}
else
{
if(down != up)
{
int temp = pan[up][j];
pan[up][j] = pan[down][j];
pan[down][j] = temp;
}
down--;
up--;
}
}
}
}
}
return answer;
}
}