2234 : 성곽

풀이

안 돼요 더는 못해요 그대 없이 사는 일 나 때문에 그대 망가진다며 이별을 원한 건 나인데

코드

#include <cstdio>

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

int n, m, a[55][55], c[55][55], cnt[55*55];

int dfs(int x, int y, int num) {
    int ret = 1;
    c[x][y] = num;
    for (int i = 0; i < 4; i++) {
        int nx = x+dx[i], ny = y+dy[i];
        if ((a[x][y]&(1<<i)) || c[nx][ny]) continue;
        ret += dfs(nx, ny, num);
    }
    return ret;
}

int main() {
    scanf("%d %d", &m, &n);
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            scanf("%d", &a[i][j]);
        }
    }

    int num = 1, mx = -1;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (!c[i][j]) {
                cnt[num] = dfs(i, j, num);
                if (mx < cnt[num]) mx = cnt[num];
                num++;
            }
        }
    }

    int add = 0;
    for (int x = 1; x <= n; x++) {
        for (int y = 1; y <= n; y++) {
            for (int d = 0; d < 4; d++) {
                int nx=x+dx[d], ny=y+dy[d], sum = 0;
                if (c[nx][ny] && c[x][y] != c[nx][ny])
                    sum = cnt[c[x][y]] + cnt[c[nx][ny]];
                if (add < sum) add = sum;
            }
        }
    }

    printf("%d\n%d\n%d", num-1, mx, add);

    return 0;
}

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2018-08-29 17:18

Read more posts by this author