๐Ÿ• Baaaaaarking/0x09๊ฐ• - BFS

[BOJ G5][C++] ๋ฐฑ์ค€ 10026๋ฒˆ: ์ ๋ก์ƒ‰์•ฝ

์„ ๋‹ฌ 2022. 3. 8. 13:37
๋ฐ˜์‘ํ˜•

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

 

10026๋ฒˆ: ์ ๋ก์ƒ‰์•ฝ

์ ๋ก์ƒ‰์•ฝ์€ ๋นจ๊ฐ„์ƒ‰๊ณผ ์ดˆ๋ก์ƒ‰์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ์€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ๊ณผ๋Š” ์ข€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ํฌ๊ธฐ๊ฐ€ N×N์ธ ๊ทธ๋ฆฌ๋“œ์˜ ๊ฐ ์นธ์— R(๋นจ๊ฐ•), G(์ดˆ๋ก)

www.acmicpc.net

 

๋ฌธ์ œ

์ ๋ก์ƒ‰์•ฝ์€ ๋นจ๊ฐ„์ƒ‰๊ณผ ์ดˆ๋ก์ƒ‰์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ์€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ๊ณผ๋Š” ์ข€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

ํฌ๊ธฐ๊ฐ€ N×N์ธ ๊ทธ๋ฆฌ๋“œ์˜ ๊ฐ ์นธ์— R(๋นจ๊ฐ•), G(์ดˆ๋ก), B(ํŒŒ๋ž‘) ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒ‰์น ํ•œ ๊ทธ๋ฆผ์ด ์žˆ๋‹ค. ๊ทธ๋ฆผ์€ ๋ช‡ ๊ฐœ์˜ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋Š”๋ฐ, ๊ตฌ์—ญ์€ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋˜, ๊ฐ™์€ ์ƒ‰์ƒ์ด ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ๋‘ ๊ธ€์ž๋Š” ๊ฐ™์€ ๊ตฌ์—ญ์— ์†ํ•œ๋‹ค. (์ƒ‰์ƒ์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๊ฐ™์€ ์ƒ‰์ƒ์ด๋ผ ํ•œ๋‹ค)

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ทธ๋ฆผ์ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—

RRRBB
GGBBB
BBBRR
BBRRR
RRRRR

์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ ๊ตฌ์—ญ์˜ ์ˆ˜๋Š” ์ด 4๊ฐœ์ด๋‹ค. (๋นจ๊ฐ• 2, ํŒŒ๋ž‘ 1, ์ดˆ๋ก 1) ํ•˜์ง€๋งŒ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์€ ๊ตฌ์—ญ์„ 3๊ฐœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. (๋นจ๊ฐ•-์ดˆ๋ก 2, ํŒŒ๋ž‘ 1)

๊ทธ๋ฆผ์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ์™€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ ๊ตฌ์—ญ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ ์ค„์—๋Š” ๊ทธ๋ฆผ์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ์˜ ๊ตฌ์—ญ์˜ ๊ฐœ์ˆ˜์™€ ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ์˜ ๊ตฌ์—ญ์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

[๐Ÿ• Baaaaaarking/0x09๊ฐ• - BFS] - [BOJ S1][C++] ๋ฐฑ์ค€ 1926๋ฒˆ : ๊ทธ๋ฆผ

 

[BOJ S1][C++] ๋ฐฑ์ค€ 1926๋ฒˆ : ๊ทธ๋ฆผ

https://www.acmicpc.net/problem/1926 1926๋ฒˆ: ๊ทธ๋ฆผ ์–ด๋–ค ํฐ ๋„ํ™”์ง€์— ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์žˆ์„ ๋•Œ, ๊ทธ ๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜์™€, ๊ทธ ๊ทธ๋ฆผ ์ค‘ ๋„“์ด๊ฐ€ ๊ฐ€์žฅ ๋„“์€ ๊ฒƒ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ. ๋‹จ, ๊ทธ๋ฆผ์ด๋ผ๋Š” ๊ฒƒ์€ 1๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„

whkakrkr.tistory.com

๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋‹ค

 

๋˜‘๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ณ ,

 

์ดํ›„ ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๊ฒŒ๋  ๊ทธ๋ฆผ์œผ๋กœ board ๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค

(์ด๋•Œ vis ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”ํ•˜๋Š”๊ฑธ ์žŠ์ง€ ๋ง์ž)

 

๊ทธ๋ฆฌ๊ณ  ๊ฐ™์€๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ๋

๋‚˜๋Š” ์˜์—ญ ๊ฐฏ์ˆ˜ ์„ธ๋Š” BFS ๋ฅผ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜๋ณตํ•ด์คฌ๋‹น

 

// Authored by : seondal
// ํ’€์ด : https://whkakrkr.tistory.com/
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>
#include <queue>

using namespace std;

string board[101];
bool vis[101][101];

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

int n;
int notrg; // ์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ ๊ฐœ์ˆ˜
int rg; // ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ ๊ฐœ์ˆ˜

// ๊ทธ๋ฆผ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
int calculate(string board[]) {
    int num = 0;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            if(vis[i][j]) continue;
            
            num++;
            char color = board[i][j];
            
            queue<pair<int, int>> q;
            q.push({i,j});
            vis[i][j] = true;
            
            while(!q.empty()){
                pair<int, int> current = q.front();
                q.pop();
                
                for(int dir=0; dir<4; dir++){
                    int x = current.first + dx[dir];
                    int y = current.second + dy[dir];
                    
                    if(x<0 || x>=n || y<0 || y>=n) continue;
                    if(board[x][y] != color || vis[x][y]) continue;
                    
                    q.push({x,y});
                    vis[x][y] = true;
                }
            }
        }
    }
    return num;
}

int main() {
    // ์ž…๋ ฅ
    cin >> n;
    for(int i=0; i<n; i++) cin >> board[i];
    
    // ์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ ๊ณ„์‚ฐ
    notrg = calculate(board);
    
    // ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๋ณด๋“œ๋กœ ๋ฐ”๊พธ๊ธฐ
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            if(board[i][j] == 'R') board[i][j] = 'G';
    
    // ๋ฐฉ๋ฌธ์—ฌ๋ถ€ ์ดˆ๊ธฐํ™”
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            vis[i][j] = false;
    
    // ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ ๊ณ„์‚ฐ
    rg = calculate(board);
    
    // ์ถœ๋ ฅ
    cout << notrg << " " << rg;
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•