https://programmers.co.kr/learn/courses/30/lessons/17679
1. 유형
시뮬레이션
2. 로직
1) 2*2부분 빈칸으로 바꾸기
2) 빈칸만큼 아래로 내리기
3) 위의 조건을 반복
이 문제에서 그나마 구현이 어려운 부분이 빈칸만큼 내리는 코드다.
3. 코드
import java.util.*;
class Solution {
static char table[][];
static boolean visited[][];
public int solution(int n, int m, String[] board) {
int answer = 0;
int flag = 0;
table = new char[n][m];
for(int i=0; i<n; i++){
table[i] = board[i].toCharArray();
}
while(true){
flag=0;
visited = new boolean[n][m];
for(int i=0; i<n-1; i++){
for(int j=0; j<m-1; j++){
flag+=checkMatrix(i, j);
}
}
if(flag==0) break;
for(int j=0; j<m; j++){
ArrayList<Character> list = new ArrayList<>();
for(int i=n-1; i>=0; i--){
if(!visited[i][j]){
list.add(table[i][j]);
}else
answer++;
}
for(int i=n-1, idx=0; i>=0; i--, idx++){
if(idx<list.size()){
table[i][j] = list.get(idx);
}else{
table[i][j] = '0';
}
}
}
}
return answer;
}
static int checkMatrix(int r, int c){
char target = table[r][c];
if(target!='0' && target==table[r+1][c] && target==table[r][c+1] && target==table[r+1][c+1]){
visited[r][c]=true;
visited[r+1][c]=true;
visited[r][c+1]=true;
visited[r+1][c+1]=true;
return 1;
}
return 0;
}
}
/*
1. 2*2 체크
2. 아래로 내리기
- 맨 아래서부터 탐색, false인것만 동적배열에 넣기
- 동적배열에서 끄내면서 다시 쌓기
*/
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - (Java)땅따먹기 (0) | 2021.06.07 |
---|---|
프로그래머스 - (Java) 괄호 회전하기 (0) | 2021.06.06 |
프로그래머스 - (Java) 방금 그곡 (0) | 2021.06.05 |
프로그래머스 - 베스트앨범 (0) | 2021.05.26 |
프로그래머스 - 가장 먼 노드 (0) | 2021.05.25 |