반응형

https://www.acmicpc.net/problem/1926

 

1926번: 그림

어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로

www.acmicpc.net

 

도화지에서 1이 나오면 dfs를 수행해주었습니다.

 

#include <iostream>
#include <algorithm>

int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,-1,1 };

int n, m, map[502][502] = { 0 };
int ans1 = 0, ans2 = 0;
bool visit[502][502] = { false };

int dfs(int x, int y) {
	visit[x][y] = true;
	int c = 1;
	for (int i = 0; i < 4; i++) {
		int nx = x + dx[i];
		int ny = y + dy[i];
		if (visit[nx][ny] || !map[nx][ny]) continue;
		c += dfs(nx, ny);
	}
	return c;
}

int main() {
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			scanf("%d", &map[i][j]);
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (!visit[i][j] && map[i][j]) {
				ans1++;
				ans2 = std::max(ans2, dfs(i, j));
			}
		}
	}
	printf("%d\n%d", ans1, ans2);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1774 : 우주신과의 교감  (0) 2021.11.16
백준 16927 : 배열 돌리기 2  (0) 2021.11.16
백준 14490 : 백대열  (0) 2021.11.15
백준 1197 : 최소 스패닝 트리  (0) 2021.11.15
프로그래머스 : 단체사진 찍기  (0) 2021.11.15

+ Recent posts