인프런 커뮤니티 질문&답변

녕뇽님의 프로필 이미지
녕뇽

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-B

1012번 질문 있습니다!

작성

·

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;
}
녕뇽님의 프로필 이미지
녕뇽
질문자

바보 같은 실수를 하드닛!! 친절한 답변 감사합니다 호

녕뇽님의 프로필 이미지
녕뇽

작성한 질문수

질문하기