# 문제링크
섬 개수 세는 문제랑 비슷한 문제다. DFS로 같은 섬의 방문한 map을 다시 0으로 변경시켜주어 다시 세지 않도록 한다. 모든 1을 0으로 바꿔주었기 때문에 여러 번 반복하더라도 초기화 할 필요가 없어서 좋다.
# 제출 코드
# include <cstdio>
char map[50+2][50+2];
int T, M, N, K;
int yd[] = { 1, -1, 0,0 };
int xd[] = { 0, 0, 1, -1 };
void Input() {
scanf("%d %d %d", &M, &N, &K);
int x, y;
for (int i = 0; i < K; i++) {
scanf("%d %d", &x, &y);
map[y][x] = '1';
}
}
void DFS(int y, int x) {
if (map[y][x] != '1') return;
map[y][x] = '0';
for (int i = 0; i < 4; i++) {
int ny = y + yd[i];
int nx = x + xd[i];
if (nx < 0 || nx > M || ny < 0 || ny > N)continue;
if (map[ny][nx] == '1')
DFS(ny, nx);
}
}
void Solve() {
int ans = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (map[i][j] == '1') {
ans++;
DFS(i,j);
}
}
}
printf("%d\n", ans);
}
int main() {
scanf("%d", &T); // 테스트 케이스 개수
while (T--) {
Input();
Solve();
}
return 0;
}
반응형
'Computer Science&Engineering > 코딩테스트' 카테고리의 다른 글
[백준 11650] 좌표 정렬하기 C++ STL활용풀이 (0) | 2021.03.20 |
---|---|
[백준 2751] 수 정렬하기 2 C++ STL 사용해서 풀기 (0) | 2021.03.20 |
[백준 2146] 다리 만들기 (0) | 2021.03.16 |
[백준 1010] 다리 놓기 #조합 (0) | 2021.03.15 |
[백준 7576] 토마토 (0) | 2021.03.14 |