https://www.welcomekakao.com/learn/courses/30/lessons/17679
#include <string>
#include <cstring>
#include <vector>
#include <iostream>
using namespace std;
int cnt = 0;
int arr[30][30];
int dy[] = { 0,1,1,0 };
int dx[] = { 1,0,1,0 };
void checking(int m, int n, vector <string> board) {
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
bool isOk = true;
char c = board[i][j];
if (c == ' ') {
isOk = false;
}
if (isOk) {
for (int k = 0; k < 3; k++)
{
int y = i + dy[k];
int x = j + dx[k];
if (y >= m || x >= n || board[y][x] != c || board[y][x]==' ') {
isOk = false;
break;
}
}
}
if (isOk) {
for (int k = 0; k < 4; k++)
{
arr[i + dy[k]][j + dx[k]] = true;
}
}
}
}
}
int erasing(int m, int n, vector <string> &board) {
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (arr[i][j] && board[i][j] != ' ') {
board[i][j] = ' ';
cnt++;
}
}
}
return cnt;
}
void down(int m, int n, vector <string> &board) {
for (int j = 0; j < n; j++)
{
int idx = m - 1;
for (int i = m - 1; i >= 0; i--)
{
if (board[i][j] != ' ') {
char temp = board[i][j];
board[i][j] = ' ';
board[idx][j] = temp;
idx--;
}
}
}
}
int solution(int m, int n, vector<string> board) {
int answer = 0;
while (true) {
cnt = 0;
memset(arr, false, sizeof(arr));
checking(m, n, board);
answer+=erasing(m, n, board);
down(m, n, board);
if (cnt == 0) break;
}
return answer;
}
'개발자 > algorithm' 카테고리의 다른 글
2018 카카오 코딩테스트 5번 : 뉴스 클러스터링 (c++) (0) | 2020.09.01 |
---|---|
2018 카카오 코딩테스트 3번 : 캐시 (c++) (0) | 2020.09.01 |
백준 1615번 : 교차개수세기 (c++) (0) | 2020.08.29 |
백준 2268번 : 수들의 합 (c++) (0) | 2020.08.29 |
백준 2618번 : 경찰차 (c++) (0) | 2020.08.28 |