파게로그

[백준 1113번] 수영장 만들기 본문

카테고리 없음

[백준 1113번] 수영장 만들기

파게 2022. 11. 12. 18:32

문제 링크: 1113번 수영장 만들기

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

 

int rows, cols;
int[,] board;
int[,] filled;
int[] dr = { 0, 0, 1, -1 };
int[] dc = { 1, -1, 0, 0 };

StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
string[] head = sr.ReadLine().Split();
rows = int.Parse(head[0]);
cols = int.Parse(head[1]);
board = new int[rows, cols];
filled = new int[rows, cols];
for (int i = 0; i < rows; i++)
{
    string line = sr.ReadLine();
    for (int j = 0; j < cols; j++)
    {
        board[i, j] = line[j] - '0';
    }
}

bool[,] visit = new bool[rows, cols];
bool apply;
List<(int, int)> list = new List<(int, int)>();

for (int level = 1; level <= 9; level++)
{
    Vinit();
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            apply = true;
            list.Clear();
            if (board[i, j] >= level || visit[i, j]) continue;
            Spread(i, j, level);
            if (apply)
            {
                foreach ((int, int) item in list)
                {
                    filled[item.Item1, item.Item2] = level;
                }
            }
        }
    }
}

int sum = 0;
for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < cols; j++)
    {
        if (filled[i, j] < 1) continue;
        sum += filled[i, j] - board[i, j];
    }
}
System.Console.WriteLine(sum);

void Vinit()
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            visit[i, j] = false;
        }
    }
}

void Spread(int ir, int ic, int level)
{
    visit[ir, ic] = true;
    list.Add((ir, ic));
    
    for (int d = 0; d < 4; d++)
    {
        int nr = ir + dr[d];
        int nc = ic + dc[d];
        if (nr < 0 || nc < 0 || nr >= rows || nc >= cols)
        {
            apply = false;
            continue;
        }
        if (board[nr, nc] >= level || visit[nr, nc])
        {
            continue;
        }
        Spread(nr, nc, level);
    }
}
Comments