๐Ÿ’  Cpp

[BOJ][C++] ๋ฐฑ์ค€ 2636๋ฒˆ: ์น˜์ฆˆ

์„ ๋‹ฌ 2024. 4. 11. 16:45
๋ฐ˜์‘ํ˜•

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

 

2636๋ฒˆ: ์น˜์ฆˆ

์•„๋ž˜ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ํŒ์ด ์žˆ๊ณ , ๊ทธ ์œ„์— ์–‡์€ ์น˜์ฆˆ(ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„)๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค. ํŒ์˜ ๊ฐ€์žฅ์ž๋ฆฌ(<๊ทธ๋ฆผ 1>์—์„œ ๋„ค๋ชจ ์นธ์— X์นœ ๋ถ€๋ถ„)์—๋Š” ์น˜์ฆˆ๊ฐ€ ๋†“

www.acmicpc.net

 

๋ฌธ์ œ

 ์ •์‚ฌ๊ฐํ˜• ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ํŒ์ด ์žˆ๊ณ , ๊ทธ ์œ„์— ์–‡์€ ์น˜์ฆˆ(ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„)๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค.

ํŒ์˜ ๊ฐ€์žฅ์ž๋ฆฌ์—๋Š” ์น˜์ฆˆ๊ฐ€ ๋†“์—ฌ ์žˆ์ง€ ์•Š์œผ๋ฉฐ ์น˜์ฆˆ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ตฌ๋ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด ์น˜์ฆˆ๋ฅผ ๊ณต๊ธฐ ์ค‘์— ๋†“์œผ๋ฉด ๋…น๊ฒŒ ๋˜๋Š”๋ฐ ๊ณต๊ธฐ์™€ ์ ‘์ด‰๋œ ์นธ์€ ํ•œ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋…น์•„ ์—†์–ด์ง„๋‹ค.

์น˜์ฆˆ์˜ ๊ตฌ๋ฉ ์†์—๋Š” ๊ณต๊ธฐ๊ฐ€ ์—†์ง€๋งŒ ๊ตฌ๋ฉ์„ ๋‘˜๋Ÿฌ์‹ผ ์น˜์ฆˆ๊ฐ€ ๋…น์•„์„œ ๊ตฌ๋ฉ์ด ์—ด๋ฆฌ๋ฉด ๊ตฌ๋ฉ ์†์œผ๋กœ ๊ณต๊ธฐ๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

์น˜์ฆˆ์˜ ๊ตฌ๋ฉ์„ ๋‘˜๋Ÿฌ์‹ผ ์น˜์ฆˆ๋Š” ๋…น์ง€ ์•Š๋Š”๋‹ค.

๋‹ค์‹œ ํ•œ ์‹œ๊ฐ„ ํ›„์—๋Š” ๋…น์•„ ์—†์–ด์ง€๊ณ  ๋‚จ์€ ์กฐ๊ฐ๋“ค์€ ํ•œ ์‹œ๊ฐ„์ด ๋” ์ง€๋‚˜๋ฉด ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง„๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฒ˜์Œ ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š” ๋ฐ๋Š” ์„ธ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

์น˜์ฆˆ๊ฐ€ ๋…น๋Š” ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

์ž…๋ ฅ์œผ๋กœ ์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ํŒ์˜ ํฌ๊ธฐ์™€ ํ•œ ์กฐ๊ฐ์˜ ์น˜์ฆˆ๊ฐ€ ํŒ ์œ„์— ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ณต๊ธฐ ์ค‘์—์„œ ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ ๋ชจ๋‘ ๋…น๊ธฐ ํ•œ ์‹œ๊ฐ„ ์ „์— ๋‚จ์•„์žˆ๋Š” ์น˜์ฆˆ์กฐ๊ฐ์ด ๋†“์—ฌ ์žˆ๋Š” ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์‚ฌ๊ฐํ˜• ๋ชจ์–‘ ํŒ์˜ ์„ธ๋กœ์™€ ๊ฐ€๋กœ์˜ ๊ธธ์ด๊ฐ€ ์–‘์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค.

์„ธ๋กœ์™€ ๊ฐ€๋กœ์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 100์ด๋‹ค.

ํŒ์˜ ๊ฐ ๊ฐ€๋กœ์ค„์˜ ๋ชจ์–‘์ด ์œ— ์ค„๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ค„๊นŒ์ง€ ์ฃผ์–ด์ง„๋‹ค.

์น˜์ฆˆ๊ฐ€ ์—†๋Š” ์นธ์€ 0, ์น˜์ฆˆ๊ฐ€ ์žˆ๋Š” ์นธ์€ 1๋กœ ์ฃผ์–ด์ง€๋ฉฐ ๊ฐ ์ˆซ์ž ์‚ฌ์ด์—๋Š” ๋นˆ์นธ์ด ํ•˜๋‚˜์”ฉ ์žˆ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„์„œ ์—†์–ด์ง€๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•˜๊ณ ,

๋‘˜์งธ ์ค„์—๋Š” ๋ชจ๋‘ ๋…น๊ธฐ ํ•œ ์‹œ๊ฐ„ ์ „์— ๋‚จ์•„์žˆ๋Š” ์น˜์ฆˆ์กฐ๊ฐ์ด ๋†“์—ฌ ์žˆ๋Š” ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

๋ณด๋“œ์— ํ‘œ์‹œํ•  ๊ฑด ๋„ค๊ฐ€์ง€

1: ์น˜์ฆˆ, 2: ๋…น์„ ์˜ˆ์ •์ธ ์น˜์ฆˆ, 3: ์™ธ๋ถ€ ๊ณต๊ธฐ, 0: ๋‚ด๋ถ€ ๊ณต๊ธฐ

 

๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋œ๋‹ค

1. ์™ธ๋ถ€์™€ ์ ‘์ด‰๋œ ๊ณต๊ธฐ(0)๋“ค์„ ์™ธ๋ถ€ ๊ณต๊ธฐ(3)๋กœ ๋ฐ”๊พผ๋‹ค

2. ์น˜์ฆˆ(1)์ค‘ ์™ธ๋ถ€๊ณต๊ธฐ(3)๊ณผ ์ ‘์ด‰ํ•œ ์น˜์ฆˆ๋“ค๋งŒ ๋…น์„ ์˜ˆ์ •์ธ ์น˜์ฆˆ(2)๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค

3. ๋…น์„ ์˜ˆ์ •์ธ ์น˜์ฆˆ(2)๋“ค์„ ๋…น์—ฌ์„œ ๋นˆ ์ž๋ฆฌ(0)๋กœ ๋ฐ”๊พผ๋‹ค

 

2๋ฒˆ๊ณผ 3๋ฒˆ ๊ณผ์ •์„ ๋™์‹œ์— ํ•  ๊ฒฝ์šฐ(์ฐพ์ž๋งˆ์ž ๋…น์—ฌ๋ฒ„๋ฆด ๊ฒฝ์šฐ)

๊ฐ™์€ ์‹œ๊ฐ„์— ์‚ฌ๋ผ์ง„ ๋‹ค๋ฅธ ์น˜์ฆˆ์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„

์—†์–ด์ง€์ง€ ์•Š์•„๋„ ๋  ์น˜์ฆˆ๊นŒ์ง€ ์—†์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋”ฐ๋กœ ์ง„ํ–‰ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

1๋ฒˆ์˜ ๊ฒฝ์šฐ 0์ธ ๋ถ€๋ถ„์„ ์ฐพ์•„ dfs๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ์ธ์ ‘ํ•œ 0๋“ค์„ 3์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์–ด์ง„ ์˜ˆ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค

// ์‹œ๊ฐ„0
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 1 1 3 3 3 
3 1 1 1 3 3 3 1 1 3 3 3 
3 1 1 1 1 1 1 3 3 3 3 3 
3 1 1 1 1 1 0 1 1 3 3 3 
3 1 1 1 1 0 0 1 1 3 3 3 
3 3 1 1 0 0 0 1 1 3 3 3 
3 3 1 1 1 1 1 1 1 3 3 3 
3 3 1 1 1 1 1 1 1 3 3 3 
3 3 1 1 1 1 1 1 1 3 3 3 
3 3 1 1 1 1 1 1 1 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 

// ์‹œ๊ฐ„1
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 1 1 3 3 3 3 3 3 3 3 
3 3 1 1 1 1 3 3 3 3 3 3 
3 3 1 1 1 3 3 1 3 3 3 3 
3 3 3 1 3 3 3 1 3 3 3 3 
3 3 3 1 1 1 1 1 3 3 3 3 
3 3 3 1 1 1 1 1 3 3 3 3 
3 3 3 1 1 1 1 1 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 

// ์‹œ๊ฐ„2
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 1 3 3 3 3 3 3 3 3 
3 3 3 1 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 1 1 1 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 

// ์‹œ๊ฐ„3
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3 
3 3 3 3 3 3 3 3 3 3 3 3

 

์ฝ”๋“œ

#include <iostream>
#include <vector>

using namespace std;

typedef pair<int, int> ci;

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

void dfs(vector<vector<int>>&board, int i, int j, int r, int c) {
    if(i<0 || i>=r || j<0 || j>=c) return;
    if(board[i][j] != 0) return;
    
    board[i][j] = 3;
    
    for(int dir=0; dir<4; dir++) {
        int x = i+dx[dir];
        int y = j+dy[dir];
        
        dfs(board, x, y, r, c);
    }
}

ci solution(vector<vector<int>>&board, int r, int c, int cheese) {
    int _time = 0, prevCheese = 0;
    dfs(board, 0, 0, r, c); // ์™ธ๋ถ€ ๊ณต๊ธฐ 3์œผ๋กœ ๋ฐ”๊พธ๊ธฐ
    while(true) {
        if(cheese==0) {
            break;
        }
        
        // 1์‹œ๊ฐ„ ์ „ ์น˜์ฆˆ ๊ฐฏ์ˆ˜ ์ €์žฅ
        prevCheese = cheese;
        
        // ์น˜์ฆˆ(1)๋“ค ์ค‘ ์™ธ๋ถ€๊ณต๊ธฐ(3)์™€ ์ ‘์ด‰ํ–ˆ์œผ๋ฉด ๋…น์„ ๋Œ€์ƒ(2)๋กœ ํ‘œ์‹œํ•˜๊ธฐ
        for(int i=0; i<r; i++) {
            for(int j=0; j<c; j++) {
                if(board[i][j]!=1) {
                    continue;
                }
                for(int dir=0; dir<4; dir++) {
                    int x = i + dx[dir];
                    int y = j + dy[dir];
                    if(board[x][y]==3) {
                        board[i][j] = 2;
                    }
                } 
            }
        }
        
        // ๋…น์„ ์น˜์ฆˆ(2)๋“ค ๋…น์ด๊ธฐ
        vector<ci> melted;
        for(int i=0; i<r; i++) {
            for(int j=0; j<c; j++) {
                if(board[i][j]==2) {
                    board[i][j] = 0;
                    cheese--;
                    melted.push_back({i,j});
                }
            }
        }
        
        // ๋…ธ์ถœ๋œ ๋‚ด๋ถ€๊ณต๊ธฐ(0) ์™ธ๋ถ€๊ณต๊ธฐ๋กœ ๋ฐ”๊พธ๊ธฐ(3)
        for(ci i : melted) {
            dfs(board, i.first, i.second, r, c);
        }
        
        // ์‹œ๊ฐ„ ์ฆ๊ฐ€
        _time++;
    }
    
    return {_time, prevCheese};
}

int main() {
    // ์ž…๋ ฅ
    int r, c, cheese=0;
    cin >> r >> c;
    vector<vector<int>> board(r, vector<int>(c));
    for(int i=0; i<r; i++) {
        for(int j=0; j<c; j++) {
            int input;
            cin >> input;
            if(input == 1) {
                cheese++;
            }
            board[i][j] = input;
        }
    }

    // ์ถœ๋ ฅ
    ci answer = solution(board, r, c, cheese);
    cout << answer.first << "\n" << answer.second;
    
    return 0;
}
๋ฐ˜์‘ํ˜•