[๋ฐฑ์ค€/C++] 2234๋ฒˆ ์„ฑ๊ณฝ

2022. 7. 16. 20:06ยทPS/C++
๋ชฉ์ฐจ
  1. ๐Ÿค”๋ฌธ์ œ ์ดํ•ด
  2. ๐Ÿ”ฅํ’€์ด๐Ÿ”ฅ
  3. โŒํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…
๋ฐ˜์‘ํ˜•

๋ฐฑ์ค€
2234๋ฒˆ ์„ฑ๊ณฝ
2234๋ฒˆ ์„ฑ๊ณฝ


๐Ÿค”๋ฌธ์ œ ์ดํ•ด

๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” 1,2,3๋ฒˆ์„ ๊ณ„์‚ฐํ•˜๋˜ ๋ฒฝ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ 1, 2, 4, 8๋กœ ์ฃผ์–ด์ง€๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์•„ ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.


 

๐Ÿ”ฅํ’€์ด๐Ÿ”ฅ

๊ฐ„๋‹จํ•œ BFS๋ฅผ ์ˆ˜ํ–‰ํ•˜๋˜ ๋ฒฝ์˜ ์ •๋ณด๋ฅผ ๋น„ํŠธ ์—ฐ์‚ฐ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๋‹ค.

((1 << i) & map[y][x]) == 0)๋Š” BFS ํ•จ์ˆ˜์—์„œ ์™ผ์ชฝ,์˜ค๋ฅธ์ชฝ,์œ„,์•„๋ž˜๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ๊ทธ ๋ฐฉํ–ฅ์— ๋ฒฝ์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด์ฃผ๋Š” ์ฝ”๋“œ์ด๋‹ค.

3๋ฒˆ์„ ๊ณ„์‚ฐํ•  ๋•Œ์—๋Š” map[i][j] = map[i][j] & ~(1 << k)์‹์„ ์ด์šฉํ•ด ๋ฒฝ์„ ํ•˜๋‚˜์”ฉ ์—†์•ค ์ •๋ณด๋ฅผ map์— ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์ฃผ๊ณ  BFS๋ฅผ ๋Œ๋ฆฐ ํ›„ map๊ฐ’์„ ์ดˆ๊ธฐ ์ƒํƒœ๋กœ ๋Œ๋ ค์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค. 

 

โŒํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

BFS๋ฅผ ๋Œ๊ธฐ ์ „ ์‹œ์ž‘์ ์„ visited์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๊นœ๋นกํ•ด ์˜ค๋ฅ˜๋ฅผ ์ฐพ๋Š”๊ฒŒ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค.

์ปดํŒŒ์ผ ์—๋Ÿฌ์˜ ๊ฒฝ์šฐ memset ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ <cstring>ํ—ค๋”๋ฅผ ๋นผ๋จน์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


#include <iostream>
#include <queue>
#include <cstring>

using namespace std;

int n, m;
int map[51][51];
bool visited[51][51];

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

queue<pair<int, int>> q;
int max_room;
int remove_max_room;
int cnt;
int room_size;

bool isValid(int y, int x) {
    return y < m && y >= 0 && x < n && x >= 0 && !visited[y][x];
}

void BFS() {
    while (!q.empty()) {
        int y = q.front().first;
        int x = q.front().second;
        q.pop();
        room_size++;

        for (int i = 0; i < 4; i++) {
            if (((1 << i) & map[y][x]) == 0) {
                int mv_y = y + dy[i];
                int mv_x = x + dx[i];
                if (isValid(mv_y, mv_x)) {
                    q.push({mv_y, mv_x});
                    visited[mv_y][mv_x] = true;
                }
            }
        }
    }
}

int main() {
    cin.tie(nullptr);
    cout.tie(nullptr);
    ios::sync_with_stdio(false);

    cin >> n >> m;

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cin >> map[i][j];
        }
    }

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (!visited[i][j]) {
                visited[i][j] = true;
                cnt++;
                q.push({i, j});
                room_size = 0;
                BFS();
                if (max_room < room_size) max_room = room_size;
            }
        }
    }
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < 4; k++) {
                memset(visited, false, sizeof(visited));
                int tmp = map[i][j];
                map[i][j] = map[i][j] & ~(1 << k);
                q.push({i, j});
                room_size = 0;
                visited[i][j] = true;
                BFS();
                remove_max_room = remove_max_room < room_size ? room_size : remove_max_room;
                map[i][j] = tmp;
            }
        }
    }
    cout << cnt << "\n" << max_room << "\n" << remove_max_room;
}
728x90
๋ฐ˜์‘ํ˜•

'PS > C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€/C++] 1149๋ฒˆ RGB๊ฑฐ๋ฆฌ  (0) 2022.07.16
[๋ฐฑ์ค€/C++] 18352 ํŠน์ •๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ  (0) 2022.07.16
[๋ฐฑ์ค€/C++] 2252๋ฒˆ ์ค„ ์„ธ์šฐ๊ธฐ  (0) 2022.07.16
[๋ฐฑ์ค€/C++] 2056๋ฒˆ ์ž‘์—…  (0) 2022.07.16
[๋ฐฑ์ค€/C++] 1162๋ฒˆ ๋„๋กœํฌ์žฅ  (0) 2022.07.16
  1. ๐Ÿค”๋ฌธ์ œ ์ดํ•ด
  2. ๐Ÿ”ฅํ’€์ด๐Ÿ”ฅ
  3. โŒํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…
'PS/C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€/C++] 1149๋ฒˆ RGB๊ฑฐ๋ฆฌ
  • [๋ฐฑ์ค€/C++] 18352 ํŠน์ •๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ
  • [๋ฐฑ์ค€/C++] 2252๋ฒˆ ์ค„ ์„ธ์šฐ๊ธฐ
  • [๋ฐฑ์ค€/C++] 2056๋ฒˆ ์ž‘์—…
yulee_to
yulee_to
  • yulee_to
    yulee
    yulee_to
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (113) N
      • CS (2)
        • OS (0)
        • DB (0)
        • Network (2)
      • Develop (21)
        • Spring (9)
        • Java (12)
        • Python (0)
        • Algorithm (0)
        • ๊ธฐํƒ€ (0)
      • PS (39)
        • C++ (39)
        • Java (0)
      • Book (39)
        • ์ž๋ฐ”์˜ ์‹  (32)
        • ์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด (7)
      • ETC (4)
        • Blog (3)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ฉ€ํ‹ฐ์บ ํผ์Šค
    boj
    ๋ฌธ์ œํ’€์ด
    EC2
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    GodOfJava
    ์œ„์ƒ์ •๋ ฌ
    1์ผ1๋ฐฑ์ค€
    TiL
    ์ž๋ฐ”์˜ ์‹ 
    Spring
    ์—์Šค๋„ท์‹œ์Šคํ…œ
    ์ž๋ฐ”
    ๋ฐฑ์ค€
    ์Šคํ”„๋ง ์ž…๋ฌธ
    ์Šคํ„ฐ๋””
    ๊ฐ์ฒด์ง€ํ–ฅ
    Java
    DP
    C++
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
yulee_to
[๋ฐฑ์ค€/C++] 2234๋ฒˆ ์„ฑ๊ณฝ

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ
์ƒ๋‹จ์œผ๋กœ

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

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.