-
백준 - Puyo Puyo [11559]공부/baekjoon 문제 2019. 6. 13. 15:19
#include <iostream> #include <queue> using namespace std; char map[12][6]; bool visit[12][6]; bool check = false; int result = 0; void down(int i, int j) { int top = i; int bot = i; int n = 0; for (int l = i; l >= 0; l--) { if (map[l][j] != '.') { map[bot - n][j] = map[l][j]; map[l][j] = '.'; n++; } } } void boom(int i, int j) { char name = map[i][j]; map[i][j] = '.'; if (i > 0) if (map[i - 1][j] == name) boom(i - 1, j); if (j > 0) if (map[i][j - 1] == name) boom(i, j - 1); if (i < 11) if (map[i + 1][j] == name) boom(i + 1, j); if (j < 5) if (map[i][j + 1] == name) boom(i, j + 1); } void bfs(int i, int j) { queue<pair<int, int>> q; pair<int, int> p; int block = 0; p.first = i; p.second = j; q.push(p); char cur = map[i][j]; visit[i][j] = true; block++; while (!q.empty()) { i = q.front().first; j = q.front().second; if (i > 0) if (map[i - 1][j] == cur && !visit[i - 1][j]) { p.first = i - 1; p.second = j; q.push(p); visit[i - 1][j] = true; block++; } if (j > 0) if (map[i][j - 1] == cur && !visit[i][j - 1]) { p.first = i; p.second = j - 1; q.push(p); visit[i][j - 1] = true; block++; } if (i < 11) if (map[i + 1][j] == cur && !visit[i + 1][j]) { p.first = i + 1; p.second = j; q.push(p); visit[i + 1][j] = true; block++; } if (j < 5) if (map[i][j + 1] == cur && !visit[i][j + 1]) { p.first = i; p.second = j + 1; q.push(p); visit[i][j + 1] = true; block++; } q.pop(); } if (block > 3) { boom(i, j); check = true; } } int main() { char cur; for (int i = 0; i < 12; i++) for (int j = 0; j < 6; j++) { cin >> map[i][j]; visit[i][j] = false; } while (true) { check = false; for (int i = 0; i < 12; i++) { for (int j = 0; j < 6; j++) { visit[i][j] = false; } } for (int i = 0; i < 12; i++) for (int j = 0; j < 6; j++) { if (map[i][j] != '.' && !visit[i][j]) { cur = map[i][j]; bfs(i, j); } } if (!check) { break; } result++; for (int i = 11; i >= 0; i--) { for (int j = 5; j >= 0; j--) { if (map[i][j] == '.') down(i, j); } } } cout << result; return 0; }
'공부 > baekjoon 문제' 카테고리의 다른 글
백준 - 아기 상어 [16236] (0) 2019.06.13 백준 - 연산자 끼워넣기 [14888] (0) 2019.06.13 백준 - 단지번호붙이기 [2667] (0) 2019.06.13 백준 - 바이러스 [2606] (0) 2019.06.13 해당 게시물들은 전부 기록을 위한 내용이며 주석 및 해석은 포함이 되어 있지 않습니다. (0) 2019.06.13