반응형

문제 링크 : www.acmicpc.net/problem/2636

 

2636번: 치즈

첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진��

www.acmicpc.net

> 풀이

 

BFS 문제입니다.

0을 bfs방식으로 탐색하다가 1을 만날 경우 0으로 바꿔주는 방식으로 풀면 됩니다.

#include <bits/stdc++.h>
using namespace std;

queue<pair<int, int>> bfs;
int table[101][101];
int moveX[4] = {1, -1, 0, 0};
int moveY[4] = {0, 0, -1, 1};
bool visit[101][101];
int X, Y, cnt, res, last;

int main(void) 
{
        scanf("%d %d", &X, &Y);
        for (int i = 0; i < X; i++)
                for (int j = 0; j < Y; j++)
                        scanf("%d", &table[i][j]);
        
        while (true) {
                for (int i = 0; i < X; i++)
                        for (int j = 0; j < Y; j++)
                                if (table[i][j] == 1) last++;

                if (last == 0) break;
                else {
                        cnt++;
                        res = last;
                }

                memset(visit, false, sizeof(visit));
                last = 0;

                bfs.push({0, 0});
                visit[0][0] = true;
                while (!bfs.empty()) {
                        auto a = bfs.front();
                        int x = a.first, y = a.second;

                        bfs.pop();

                        for (int i = 0; i < 4; i++) {
                                int nx = x + moveX[i];
                                int ny = y + moveY[i];

                                if (nx >=0 && ny >= 0 && nx < X && ny < Y && !visit[nx][ny]) {
                                        if (table[nx][ny] == 0)
                                                bfs.push({nx, ny});
                                        else if (table[nx][ny] == 1)
                                                table[nx][ny] = 0;

                                        visit[nx][ny] = true;
                                }
                        }
                }
        }
        printf("%d\n%d", cnt, res);
        return 0;
}

(개발 환경 : vscode)

반응형

+ Recent posts