반응형

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

 

2638번: 치즈

첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로

www.acmicpc.net

 

먼저 바깥 공간을 다 구해놓고, 치즈가 녹을 때마다 바깥 공간을 업데이트해주었습니다.

그리고 바깥 공간과 접촉면이 두 개 이상이면, 치즈를 녹여주었습니다.

 

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int n, m, cnt = 0;
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,-1,1 };
int map[102][102] = { 0 };
bool visit[102][102] = { false };

void checkOutsideSpace(int x, int y) {
    visit[x][y] = true;
    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i];
        int ny = y + dy[i];
        if (nx < 0 || ny < 0 || nx > n || ny > m) continue;
        if (visit[nx][ny]) continue;
        if (map[nx][ny] == 1) continue;
        checkOutsideSpace(nx, ny);
    }
}

bool checkMelting(int x, int y) {
    int c = 0;
    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i];
        int ny = y + dy[i];
        if (visit[nx][ny] && map[nx][ny] == 0) c++;
    }
    return c >= 2;
}

int calTime() {
    int time = 0;
    checkOutsideSpace(0, 0);
    vector<pair<int, int>> melted;
    while (1) {
        time++;
        melted.clear();
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (map[i][j] == 1 && checkMelting(i, j)) {
                    melted.push_back({ i, j });
                    cnt--;
                }
            }
        }
        if (cnt == 0) break;
        for (int i = 0; i < melted.size(); i++) {
            map[melted[i].first][melted[i].second] = 0;
            checkOutsideSpace(melted[i].first, melted[i].second);
        }
    }

    return time;
}

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]);
            if (map[i][j] == 1) cnt++;
        }
    }
    printf("%d", calTime());
}
반응형

'Algorithm' 카테고리의 다른 글

프로그래머스 : 크레인 인형뽑기 게임  (0) 2021.11.13
백준 10282 : 해킹  (0) 2021.11.13
백준 4485 : 녹색 옷 입은 애가 젤다지?  (0) 2021.11.13
백준 11967 : 불켜기  (0) 2021.11.13
백준 10422 : 괄호  (0) 2021.11.13

+ Recent posts