본문 바로가기
BaekJoon/C++

6186 : Best Grass (C++)

by GrayChoi 2021. 2. 26.
반응형

 

6186번: Best Grass

Bessie is planning her day of munching tender spring grass and is gazing out upon the pasture which Farmer John has so lovingly partitioned into a grid with R (1 <= R <= 100) rows and C (1 <= C <= 100) columns. She wishes to count the number of grass clump

www.acmicpc.net


BFS 또는 DFS를 이용하면 간단하게 풀 수 있는 문제이다.

문제 해석을 하자면 #을 세면 되는데 #은 가로 또는 세로로 붙어있을 수 있다.

요즘 영어문제 푸는게 재미있어졌는데 영어 독해 실력도 늘고 코딩실력도 늘고

재미져잉~~ 나도 얼른 코딩천재~~ 알고리즘 천재~~

#include<iostream>
#include<string>
#include<queue>

using namespace std;

char map[100][100];
bool visit[100][100];

int R, C, result;

int dr[4] = {1, -1, 0, 0};
int dc[4] = {0, 0, 1, -1};

queue<pair<int, int>> q;

// BFS
void bfs(int r, int c) {
    visit[r][c] = true;

    while(!q.empty()) {
        r = q.front().first;
        c = q.front().second;
        q.pop();

        for(int i = 0; i < 4; i++) {
            int nr = r + dr[i];
            int nc = c + dc[i];
            if(nr >= 0 && nr < R && nc >= 0 && nc < C) {
                if(map[nr][nc] == '#' && visit[nr][nc] == false) {
                    q.push({nr, nc});
                    visit[nr][nc] = true;
                }
            }
        }
    }
    
}

// DFS
void dfs(int r, int c) {
    visit[r][c] = true;

    for(int i = 0; i < 4; i++) {
        int nr = r + dr[i];
        int nc = c + dc[i];
        if(nr >= 0 && nr < R && nc >= 0 && nc < C) {
            if(map[nr][nc] == '#' && visit[nr][nc] == false) {
                dfs(nr, nc);
            }
        }
    }
}

int main() {
    scanf("%d %d", &R, &C);

    for(int r = 0; r < R; r++) {
        string temp;
        cin >> temp;
        for(int c = 0; c < C; c++) {
            map[r][c] = temp[c];
        }
    }

    for(int r = 0; r < R; r++) {
        for(int c = 0; c < C; c++) {
            if(map[r][c] == '#' && visit[r][c] == false) {
                result++;
                /*
                BFS
                q.push({r, c});
                bfs(r, c);
                */

                // DFS
                dfs(r, c);
            }
        }
    }

    printf("%d\n", result);

    return 0;
}
반응형

'BaekJoon > C++' 카테고리의 다른 글

5378 : Hex (C++)  (0) 2021.02.27
6764 : Sounds fishy! (C++)  (0) 2021.02.26
5011 : Robots on a grid (C++)  (0) 2021.02.26
11286 : 절댓값 힙 (C++)  (0) 2021.02.25
5928 : Contest Timing (C++)  (0) 2021.02.24

댓글