문제 설명
해결과정
Solution.java
import java.util.*;
class Solution {
public int solution(int m, int n, String[] board) {
// 지운 블록의 갯수
int answer = 0;
// String 배열 board의 char 변수를 저장할 char 배열
char[][] blocks = boardToBlocks(board, m, n);
// 지워야 하는 blocks 의 인덱스 추가하기
Set<String> set = new TreeSet<>();
set.add("Start");
while(set.size() != 0) {
set.clear();
// Blocks 배열에서 지워야 하는 Block 확인
doubleSquareCheck(blocks, set, m, n);
// Set에 있는 인덱스 지우기
clearBlock(blocks, set);
// 비어있는 공간 채우기
fillEmptySpace(blocks, m, n);
answer += set.size();
}
return answer;
}
// 함수들
// 비어있는 공간 채우기
void fillEmptySpace (char[][] blocks, int m, int n) {
StringBuilder sb = new StringBuilder();
int length = 0;
// 지워진 블록 채우기
for(int j = 0; j < n; j++) {
sb.setLength(0);
for(int i = 0; i < m; i++) {
// 빈문자열이 아닌 문자들 StringBuilder 에 집어넣기
if(blocks[i][j] != ' ') {
sb.append(blocks[i][j]);
}
blocks[i][j] = ' ';
}
length = sb.length();
for(int i = m-length; i < m; i++) {
blocks[i][j] = sb.charAt(0);
sb.deleteCharAt(0);
}
}
}
// Set에 있는 인덱스들 지우기
void clearBlock (char[][] blocks, Set<String> set) {
String[] arr = new String[2];
// 지워야 하는 인덱스 찾아서 지우기
for(String index : set) {
arr = index.split(" ");
// System.out.println("지워야 하는 인덱스 : " + arr[0] + ", " + arr[1]);
blocks[Integer.parseInt(arr[0])][Integer.parseInt(arr[1])] = ' ';
}
}
// Blocks 배열에서 지워야 하는 Block 확인
void doubleSquareCheck (char[][] blocks, Set<String> set, int m, int n) {
// blocks 배열을 4개씩 확인 m-2 n-2
for(int i = 0; i <= m-2; i++) {
for(int j = 0; j <= n-2; j++) {
if(blocks[i][j] != ' ') {
if(blocks[i][j] == blocks[i][j+1] && blocks[i][j] == blocks[i+1][j] && blocks[i][j] == blocks[i+1][j+1]) {
set.add((i) + " " + (j));
set.add((i) + " " + (j+1));
set.add((i+1) + " " + (j));
set.add((i+1) + " " + (j+1));
}
}
}
}
}
// Board(String) 배열 을 Blocks(char) 배열 로 변경
char[][] boardToBlocks(String[] board, int m, int n) {
char[][] blocks = new char[m][n];
// String 배열 board의 char 변수를 blocks에 저장
for(int i = 0; i < board.length; i++) {
for(int j = 0; j < board[i].length(); j++) {
blocks[i][j] = board[i].charAt(j);
}
}
return blocks;
}
// blocks 배열 출력
void printBlocks(char[][] blocks) {
for(int i = 0; i < blocks.length; i++) {
for(int j = 0; j < blocks[i].length; j++) {
System.out.print(blocks[i][j] + " ");
}
System.out.print("\n");
}
}
}
Java
복사