Files
Coding-Practice/programmers/[1차] 프렌즈4블록/solution.java
T
2023-01-30 22:10:10 +09:00

76 lines
2.8 KiB
Java

// [문제 링크]: https://school.programmers.co.kr/learn/courses/30/lessons/17679
import java.util.*;
class Solution {
public int solution(int m, int n, String[] board) {
int answer = 0, rlen = board.length, clen = board[0].length();
Character[][] boa = new Character[rlen][clen];
for(int a = 0; a < rlen; a++) boa[a] = board[a].chars().mapToObj(c -> (char)c).toArray(Character[]::new);
while(true){
Character[][] temp = new Character[rlen][clen];
for(int a = 0; a < rlen; a++) {
temp[a] = boa[a].clone();
// System.out.println(Arrays.toString(temp[a])); //프린트해서 확인하기
}
HashSet<Integer> hs = new HashSet<>();
boolean bigChk = false;
for(int a = 0; a < rlen-1; a++){
for(int b = 0; b < clen-1; b++){
Character me = boa[a][b];
boolean chk = true;
for(int c = 0; c < 2; c++){
for(int d = 0; d < 2; d++){
if(c == 0 && d == 0) continue;
if(me == ' ') {
chk = false;
break;
}
if(boa[a+c][b+d] != me) chk = false;
}
}
if(chk) {
bigChk = true;
for(int c = 0; c < 2; c++){
for(int d = 0; d < 2; d++){
hs.add((a+c)*clen+b+d);
}
}
}
}
}
if(!bigChk) break;
for(int set : hs){
int r = set/clen, c = set%clen;
temp[r][c] = ' ';
answer++;
}
boa = trans(remove(trans(temp)));
}
return answer;
}
public Character[][] trans(Character[][] ob){
Character[][] temp = new Character[ob[0].length][ob.length];
for(int a = 0; a < ob.length; a++){
for(int b = 0; b < ob[0].length; b++){
temp[b][a] = ob[a][b];
}
}
return temp;
}
public Character[][] remove(Character[][] temp){
for(int a = 0; a < temp.length; a++){
Arrays.sort(temp[a], new Comparator<Character>(){
@Override
public int compare(Character s1, Character s2){
if(s1 == ' ' && s2 == ' ') return 0;
else if(s1 == ' ' && s2 != ' ') return -1;
else if(s1 != ' ' && s2 == ' ') return 1;
else return 0;
}
});
}
return temp;
}
}