작성
·
212
0
#include<bits/stdc++.h>
using namespace std;
int a[51][51], visited[51][51], t, m, n, k, x, y;
const int dy[] = {-1, 0, 1, 0};
const int dx[] = {0, 1, 0, -1};
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 || ny>=n || nx<0 || ny>=m) continue;
if(!a[ny][nx]) continue;
if(visited[ny][nx]) continue;
dfs(ny, nx);
}
return;
}
int main() {
cin >> t;
while(t--) {
fill(&a[0][0], &a[0][0] + 51 * 51, 0);
fill(&visited[0][0], &visited[0][0] + 51 * 51, 0);
int cnt = 0;
cin >> m >> n >> k;
for(int i=0; i<k; i++) {
cin >> x >> y;
a[y][x] = 1;
}
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(a[i][j] == 1 && visited[i][j] == 0) {
dfs(i,j);cnt++;
}
}
}
cout << cnt << '\n';
}
return 0;
}
if(!a[ny][nx]) continue;
if(visited[ny][nx]) continue;
이렇게 했을 때 주어진 테스트 케이스는 정답이 나오거든요? 백준 사이트에선 오답이 나오더라구요 선생님이 올려주신 코드랑 차이점이 뭔지 궁금합니다.
답변 1
0
안녕하세요 ㅎㅎ 제가 주석을 좀 달아봤는데요. 참고 부탁드립니다.
#include<bits/stdc++.h>
using namespace std;
int a[51][51], visited[51][51], t, m, n, k, x, y;
// good
const int dy[] = {-1, 0, 1, 0};
const int dx[] = {0, 1, 0, -1};
void dfs(int y, int x) {
// good
visited[y][x] = 1;
for(int i=0; i<4; i++) {
// good
int ny = y + dy[i];
int nx = x + dx[i];
//이부분을 실수 하셨어요. nx 부분이요.
if(ny<0 || ny>=n || nx<0 || nx>=m) continue;
if(!a[ny][nx]) continue;
if(visited[ny][nx]) continue;
dfs(ny, nx);
}
return;
}
int main() {
cin >> t;
//good
while(t--) {
fill(&a[0][0], &a[0][0] + 51 * 51, 0);
fill(&visited[0][0], &visited[0][0] + 51 * 51, 0);
// good
int cnt = 0;
cin >> m >> n >> k;
// good
for(int i=0; i<k; i++) {
cin >> x >> y;
a[y][x] = 1;
}
// good
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(a[i][j] == 1 && visited[i][j] == 0) {
dfs(i,j);cnt++;
}
}
}
cout << cnt << '\n';
}
return 0;
}
바보 같은 실수를 하드닛!! 친절한 답변 감사합니다 호