코드 흐름
- 우선 함수를 여러개 나누었다. while 문을 무한루프 돌려놓고 그안에 함수의 순서를 지정하였다.
- 전역변수 flag로 바꿀 블록이 있는지없는지 체크,
- 전역변수 check로 바꿀 블록의 위치를 체크
- 전역변수 answer로 정답을 체크
- blockCheck 함수로 블록을 검사하고 check배열에 체크한다.
- blockDelete 함수로 바꿀블록을 지워준다.
- blockReset 함수로 지운블록의 위치를 삭제하고 다시 블록의 위치를 재설정한다
class Solution {
boolean flag;
boolean[][] check;
int answer;
public void blockCheck(char[][] table, int n, int m){
for(int i = 0 ; i < m-1 ; i++){
for(int j = 0 ; j < n-1 ; j++){
if(table[i][j]=='-')
continue;
char a = table[i][j];
if(table[i][j+1]==a && table[i+1][j+1]==a && table[i+1][j]==a){
check[i][j] = true;
check[i][j+1] = true;
check[i+1][j] = true;
check[i+1][j+1] = true;
flag = false;
}
}
}
}
public void blockDelete(char[][] table, int n, int m){
for(int i = 0 ; i < m ; i++){
for(int j = 0 ; j < n ; j++){
if(check[i][j]){
table[i][j] = '-';
answer++;
}
}
}
}
public void blockReset(char[][] table, int n, int m){
for(int i = 0 ; i < m ; i++){
for(int j = 0 ; j < n ; j++){
if(table[i][j]=='-'){
for(int k=i;k<m;k++){
if(table[k][j]=='-'){
continue;
}
table[i][j]=table[k][j];
table[k][j]='-';
break;
}
}
}
}
}
public int solution(int m, int n, String[] board) {
answer = 0;
char[][] table = new char[m][n];
for(int i = 0 ; i < m ; i++){
table[i]=board[m-i-1].toCharArray();
}
while(true){
flag=true;
check = new boolean[m][n];
blockCheck(table,n,m);
if(flag)
break;
blockDelete(table,n,m);
blockReset(table,n,m);
}
return answer;
}
}
'Algorithm > Programers' 카테고리의 다른 글
Lv 2. 2개 이하로 다른 비트 (0) | 2024.07.23 |
---|---|
Lv 2. n제곱배열자르기 (4) | 2024.07.22 |
Lv 2. 2xn타일링 (1) | 2024.07.20 |
Lv 2. 숫자변환하기 (1) | 2024.07.19 |
Lv 2. 오픈채팅방 (0) | 2024.07.18 |