diff --git a/programmers/[1차] 프렌즈4블록/solution.java b/programmers/[1차] 프렌즈4블록/solution.java new file mode 100644 index 0000000..d595b4a --- /dev/null +++ b/programmers/[1차] 프렌즈4블록/solution.java @@ -0,0 +1,76 @@ +// [문제 링크]: 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 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(){ + @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; + } +} \ No newline at end of file