https://www.acmicpc.net/problem/2636
#include <iostream>
using namespace std;
int N, M;
int dy[4] = { 0, 1, 0, -1 };
int dx[4] = { 1, 0, -1, 0 };
int cheese[111][111];
int tmp[111][111];
bool visited[111][111];
void dfs(int y, int x) {
for (int i = 0; i < 4; i++) {
if (y + dy[i] < 1 || y + dy[i] > N || x + dx[i] < 1 || x + dx[i] > M) continue;
if (visited[y + dy[i]][x + dx[i]]) continue;
visited[y + dy[i]][x + dx[i]] = true;
if (!cheese[y + dy[i]][x + dx[i]]) dfs(y + dy[i], x + dx[i]);
else tmp[y + dy[i]][x + dx[i]] = 1;
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> N >> M;
int cnt = 0; int removed = 0; int last = 0;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
cin >> cheese[i][j];
if (cheese[i][j]) cnt++;
}
}
int c = 0;
while (cnt != 0) {
c++;
removed = 0;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
visited[i][j] = false;
tmp[i][j] = 0;
}
}
dfs(1, 1);
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
if (tmp[i][j]) {
cheese[i][j] = 0;
removed++;
}
}
}
last = removed;
cnt -= removed;
}
cout << c << "\n" << last;
}
|
cs |
'설명없음' 카테고리의 다른 글
백준 2295: 세 수의 합 [C/C++] (0) | 2022.06.16 |
---|---|
백준 7453: 합이 0인 네 정수 [C/C++] (0) | 2022.06.13 |
백준 15685: 드래곤 커브 [C언어], 삼성 코딩 테스트 (0) | 2022.06.13 |
백준 15673: 감시 [C언어], 삼성 코딩 테스트 (0) | 2022.06.13 |
백준 16234: 인구 이동 [C언어], 삼성 코딩 테스트 (0) | 2022.06.13 |