Programmers 17679 프렌즈4블록
in Algorithm
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/17679
나의 풀이
좌측 상단부터 블록이 사라질 수 있는지 확인하고, 현재 상태에서 지울 수 있는 블록을 모두 지우면 빈 공간을 아래로 떨어뜨려 빈 공간을 채운다.
풀이 코드 : 17679 프렌즈4블록
#include <string>
#include <vector>
using namespace std;
bool check(vector<string> board, int row, int col){
bool check1, check2, check3;
check1 = board[row][col] == board[row+1][col];
check2 = board[row][col] == board[row][col+1];
check3 = board[row][col] == board[row+1][col+1];
return check1 && check2 && check3;
}
int solution(int m, int n, vector<string> board) {
int answer = 0;
bool end=false;
vector<string> temp;
temp.resize(m);
for(int i=0;i<m;i++) temp[i] = board[i];
while(!end){
end = true;
for(int i=0;i<m-1;i++){
for(int j=0;j<n-1;j++){
if(board[i][j] != ' ' && check(board, i, j)){
end = false;
if(temp[i][j] != ' ') answer++;
if(temp[i+1][j] != ' ') answer++;
if(temp[i][j+1] != ' ') answer++;
if(temp[i+1][j+1] != ' ') answer++;
temp[i][j] = ' ';
temp[i][j+1] = ' ';
temp[i+1][j] = ' ';
temp[i+1][j+1] = ' ';
}
}
}
for(int i=0;i<n;i++){
for(int j=m-1;j>0;j--){
if(temp[j][i] == ' '){
for(int k=j-1;k>=0;k--){
if(temp[k][i] != ' '){
char t = temp[k][i];
temp[k][i] = temp[j][i];
temp[j][i] = t;
break;
}
}
}
}
}
for(int i=0;i<m;i++) board[i] = temp[i];
}
return answer;
}