문제

블록 끌어내리는게 헷갈렸음

#include <string>
#include <vector>
#include <set>
#include <algorithm> // sort
using namespace std;

bool check(int r, int c, const vector<string> &board) {
	int i, j;
	for (i = 0; i < 2; i++) {
		for (j = 0; j < 2; j++) {
			if (board[r + i][c + j] != board[r][c]) return false;
		}
	}
	return true;
}

void update(set< pair<int, int> > &s, vector<string> &board, int m, int n) {
	int i, j, k;

	for (auto it : s) board[it.first][it.second] = '.';

	for (i = 1; i < m; i++) {
		for (j = 0; j < n; j++) {
			if (board[i][j] == '.') {
				for (k = i; k > 0; k--) {
					if (board[k - 1][j] == '.') break;
					board[k][j] = board[k - 1][j];
					board[k - 1][j] = '.';
				}
			}
		}
	}
	s.clear();
}

int solution(int m, int n, vector<string> board) {
	int answer = 0;
	int i, j;
	set< pair<int, int> > s; // 지울 블록들의 좌표

	while (true) {
		int cnt = 0; // 현재 라운드에서 지워지는 블록의 수

		for (i = 0; i < m - 1; i++) { // 현재 라운드에서 지워야 할 블록 구하기
			for (j = 0; j < n - 1; j++) {
				if (board[i][j] != '.' && check(i, j, board)) { // insert to set
					s.insert({ i, j });
					s.insert({ i, j + 1 });
					s.insert({ i + 1, j });
					s.insert({ i + 1, j + 1 });
				}
			}
		}

		cnt += s.size();
		answer += cnt;
		if (cnt == 0) break; // 더이상 지울 블록이 없으면 종료

		update(s, board, m, n); // 판 업데이트

	}
	return answer;
}