1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
class Solution {
public int solution(int m, int n, String[] board) {
int answer = 0;
char[][] c_board = new char[m][n];
int[] pos = new int[n]; // 블록이 내려올 위치
boolean flag = true;
// char array로 변환
for (int i = 0; i < m; i++)
c_board[i] = board[i].toCharArray();
// pos 초기화
for (int i = 0; i < n; i++)
pos[i] = -1;
// 없앨 블록이 있을 경우에만 진행
while (flag) {
char[][] chk = new char[m][n];
flag = false;
for (int i = 0; i < m - 1; i++) {
for (int j = 0; j < n - 1; j++) {
// 현재 블록과 오른쪽, 아래, 오른쪽 아래 블록이 모두 일치하는지 비교
if (c_board[i][j] != '0' && c_board[i][j + 1] != '0' && c_board[i + 1][j] != '0'
&& c_board[i + 1][j + 1] != '0') {
if (c_board[i][j] == c_board[i][j + 1] && c_board[i][j] == c_board[i + 1][j]
&& c_board[i][j] == c_board[i + 1][j + 1]) {
chk[i][j] = chk[i][j + 1] = chk[i + 1][j] = chk[i + 1][j + 1] = '1';
pos[j] = pos[j + 1] = i + 1;
flag = true;
}
}
}
}
if (flag) {
// chk에 따라서 블록을 정렬
for (int i = 0; i < n; i++) {
for (int j = pos[i]; j >= 0; j--) {
if (chk[j][i] != '1') {
c_board[pos[i]--][i] = c_board[j][i];
} else {
answer++;
}
c_board[j][i] = '0';
}
}
}
}
return answer;
}
}
|
cs |
작동 방식
1. 없앨 블록 찾아서 체크
2. 체크한 블록 제거 및 카운트, 정렬