diff --git a/src/week2/BOJ14502/BOJ14502_V1.cpp b/src/week2/BOJ14502/BOJ14502_V1.cpp new file mode 100644 index 0000000..30c70be --- /dev/null +++ b/src/week2/BOJ14502/BOJ14502_V1.cpp @@ -0,0 +1,87 @@ +#include +using namespace std; +int N,M; +int max_cnt; +int dy[4] = {0,1,0,-1}; +int dx[4] = {1,0,-1,0}; +vector> inp_map; +vector> visited; +vector> empty_cells; + + +void dfs(int y, int x) { + visited[y][x] = 1; + + for (int i = 0; i < 4; i++) { + int ny = y + dy[i]; + int nx = x + dx[i]; + + if (ny < 0 || nx < 0 || ny >= N || nx >= M || visited[ny][nx]) continue; + + if (inp_map[ny][nx] == 1) + continue; + dfs(ny, nx); + } +} + +void solve(pair first, pair second, pair third) { + inp_map[first.first][first.second] = 1; + inp_map[second.first][second.second] = 1; + inp_map[third.first][third.second] = 1; + + for (int i = 0; i < N; i++) { + for (int j = 0; j < M; j++) { + if (inp_map[i][j] == 2 && visited[i][j] == 0) { + dfs(i, j); + } + } + } + + int cnt = 0; + for (int i = 0; i < N; i++) { + for (int j = 0; j < M; j++) { + if (inp_map[i][j] == 2 || visited[i][j] == 1 || inp_map[i][j] == 1) continue; + cnt++; + } + } + if (cnt > max_cnt) max_cnt = cnt; + for (int i = 0; i < visited.size(); i++) { + fill(visited[i].begin(), visited[i].end(), 0); + } + inp_map[first.first][first.second] = 0; + inp_map[second.first][second.second] = 0; + inp_map[third.first][third.second] = 0; +} +int main() { + + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cout.tie(NULL); + + cin >> N >> M; + + for (int i = 0; i < N; i++) { + inp_map.push_back(vector()); + visited.push_back(vector()); + for (int j = 0; j < M; j++) { + int temp; + cin >> temp; + inp_map[i].push_back(temp); + visited[i].push_back(0); + if (temp == 0) + empty_cells.push_back(make_pair(i, j)); + } + } + + for (int i=0; i