[BOJ][C++] ๋ฐฑ์ค€ 1303๋ฒˆ: ์ „์Ÿ - ์ „ํˆฌ

2025. 4. 23. 21:56ยท๐Ÿ’ญ Problem Solving/C++

๋ฌธ์ œ

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

 

๋ฌธ์ œ ์ดํ•ด

N × M ์ „์Ÿํ„ฐ์—์„œ ์šฐ๋ฆฌ ๋ณ‘์‚ฌ(W)์˜ ์œ„๋ ฅ์˜ ํ•ฉ๊ณผ ์ ๊ตญ์˜ ๋ณ‘์‚ฌ(B)์˜ ์œ„๋ ฅ์˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค.

N๋ช…์ด ๋ญ‰์ณ์žˆ์„ ๋•Œ N²์˜ ์œ„๋ ฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

๐Ÿ’ก DFS & BFS

  • ์ฒซ ๋ฒˆ์งธ ์นธ๋ถ€ํ„ฐ dr, dc ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ๊ฐ™์€ ๋ฌธ์ž('W' / 'B')๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ƒํ•˜์ขŒ์šฐ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.
    ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ณณ์€ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํƒ์ƒ‰ํ•˜๋Š” ๊ณณ์€ ๋ฐฉ๋ฌธ ํ‘œ๊ธฐํ•˜๊ณ , ํ•ด๋‹น ๋ณ‘์‚ฌ ์ˆ˜ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  • ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ ํ›„ ๋ญ‰์ณ์žˆ๋Š” ๋ณ‘์‚ฌ์˜ ์œ„๋ ฅ์„ ์ €์žฅํ•œ๋‹ค.
  • ๋ณ‘์‚ฌ์˜ ์œ„๋ ฅ์„ ํ•ฉํ•œ ๊ฐ’์„ ๊ฐ๊ฐ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ฝ”๋“œ

1๏ธโƒฃ DFS

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

int n, m, cnt;
char color;
vector<vector<char>> board;
vector<vector<bool>> visited;
vector<int> w, b;
int dr[4] = {-1, 1, 0, 0};
int dc[4] = {0, 0, -1, 1};

void dfs(int r, int c)
{
    // ์ธ๋ฑ์Šค
    // ์ข…๋ฃŒ ์กฐ๊ฑด: ๊ฐ™์€ ๋ณ‘์‚ฌ๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ณณ
    if (r < 0 || r >= m || c < 0 || c >= n || board[r][c] != color || visited[r][c])
        return;
    
    cnt++;
    visited[r][c] = true;
    
    for (int i = 0; i < 4; i++)
        dfs(r + dr[i], c + dc[i]);
}

int main()
{
    // ์ž…๋ ฅ
    cin >> n >> m;
    board.assign(m, vector<char>(n));
    visited.assign(m, vector<bool>(n, false));
    for (int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            cin >> board[i][j];
        }
    }

    // ์—ฐ์‚ฐ
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (!visited[i][j]) {
                color = board[i][j];
                cnt = 0;
                dfs(i, j);
                if (color == 'W')
                    w.push_back(cnt * cnt);
                else
                    b.push_back(cnt * cnt);
            }
        }
    }
    
    // ์ถœ๋ ฅ
    cout << accumulate(w.begin(), w.end(), 0) << ' ' << accumulate(b.begin(), b.end(), 0);

    return 0;
}

 

2๏ธโƒฃ BFS

#include <iostream>
#include <vector>
#include <queue>
#include <numeric>

using namespace std;
typedef pair<int, int> pii;

int n, m, cnt;
char color;
vector<vector<char> > board;
vector<vector<bool> > visited;
vector<int> w, b;
int dr[4] = {-1, 1, 0, 0};
int dc[4] = {0, 0, -1, 1};

void bfs(int r, int c) {
    queue<pii> q;

    q.push(make_pair(r, c));
    visited[r][c] = true;

    while (!q.empty()) {
        auto [r, c] = q.front();
        cnt++;
        q.pop();

        for (int i = 0; i < 4; i++) {
            int nr = r + dr[i];
            int nc = c + dc[i];
            if (nr < 0 || nr >= m || nc < 0 || nc >= n || board[nr][nc] != color || visited[nr][nc])
                continue;
            q.push(make_pair(r + dr[i], c + dc[i]));
            visited[nr][nc] = true;
        }
    }
}

int main() {
    // ์ž…๋ ฅ
    cin >> n >> m;
    board.assign(m, vector<char>(n));
    visited.assign(m, vector<bool>(n, false));
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cin >> board[i][j];
        }
    }

    // ์—ฐ์‚ฐ
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (!visited[i][j]) {
                color = board[i][j];
                cnt = 0;
                bfs(i, j);
                if (color == 'W')
                    w.push_back(cnt * cnt);
                else
                    b.push_back(cnt * cnt);
            }
        }
    }

    // ์ถœ๋ ฅ
    cout << accumulate(w.begin(), w.end(), 0) << ' ' << accumulate(b.begin(), b.end(), 0);

    return 0;
}

'๐Ÿ’ญ Problem Solving > C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ][C++] ๋ฐฑ์ค€ 11559๋ฒˆ: Puyo Puyo  (0) 2025.05.18
[BOJ][C++] ๋ฐฑ์ค€ 2606๋ฒˆ: ๋ฐ”์ด๋Ÿฌ์Šค  (0) 2025.05.13
[BOJ][C++] ๋ฐฑ์ค€ 1890๋ฒˆ: ์ ํ”„  (0) 2025.04.23
[BOJ][C++] ๋ฐฑ์ค€ 2579๋ฒˆ: ๊ณ„๋‹จ์˜ค๋ฅด๊ธฐ  (0) 2025.04.23
[BOJ][C++] ๋ฐฑ์ค€ 1260๋ฒˆ: DFS์™€ BFS  (0) 2025.04.23
'๐Ÿ’ญ Problem Solving/C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ][C++] ๋ฐฑ์ค€ 11559๋ฒˆ: Puyo Puyo
  • [BOJ][C++] ๋ฐฑ์ค€ 2606๋ฒˆ: ๋ฐ”์ด๋Ÿฌ์Šค
  • [BOJ][C++] ๋ฐฑ์ค€ 1890๋ฒˆ: ์ ํ”„
  • [BOJ][C++] ๋ฐฑ์ค€ 2579๋ฒˆ: ๊ณ„๋‹จ์˜ค๋ฅด๊ธฐ
0=2.
0=2.
  • 0=2.
    0=2
    0=2.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (104)
      • ๐Ÿ“‚ Project (2)
        • Paint the City (2)
      • ๐Ÿ’ญ Problem Solving (42)
        • C++ (28)
        • Java (14)
      • ๐Ÿ“ Study (17)
        • React (1)
        • Java (16)
      • ๐Ÿ’ป CS (11)
        • ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ (2)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (9)
      • ๐Ÿƒ‍โ™€๏ธ Activities (32)
        • Web Front-End Basic Study (6)
        • 42 Cursus (26)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    unity
    CSS
    CS
    ์‹œ๋ฎฌ๋ ˆ์ด์…˜
    dynamic programming
    makefile
    react
    swea
    github
    VR
    git
    42๊ฒฝ์‚ฐ
    knapsack
    ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ
    C
    ๋ฐฑํŠธ๋ž˜ํ‚น
    ์ •๋ ฌ
    dfs
    ๋ฐฑ์ค€
    ๊ตฌํ˜„
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    .h
    HTML
    ํŠธ๋ฆฌ
    ๋งต
    La Piscine
    java
    BFS
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
0=2.
[BOJ][C++] ๋ฐฑ์ค€ 1303๋ฒˆ: ์ „์Ÿ - ์ „ํˆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”