https://www.acmicpc.net/problem/3187
기본적인 bfs 문제이다. 생각나는 대로 짜서.. 효율적이지 않은 것 같다. 전역변수 막 쓰고 난리난듯
#include <iostream>using namespace std;char fence[251][251] = {0, };bool visit[251][251] = {0, };int row, col, sheep, wolf;int dx[4] = {0, -1, 0, 1};int dy[4] = {-1, 0, 1, 0};bool isInner(int x, int y) {return (x >= 0 && x < row && y >= 0 && y < col);}// v : 늑대, k : 양void bfs(int x, int y) {visit[x][y] = true;if (fence[x][y] == 'k') {sheep++;} else if (fence[x][y] == 'v') {wolf++;}for (int i = 0 ; i < 4; ++i) {int newX = x + dx[i];int newY = y + dy[i];if (isInner(newX, newY) && fence[newX][newY] != '#' && !visit[newX][newY]) {bfs(newX, newY);}}}void printVisit() {for(int i = 0 ; i < row; ++i) {for(int j = 0; j < col; ++j) {cout << visit[i][j] << " ";}cout << endl;}cout << endl;}int main(){int s = 0, w = 0;scanf("%d %d", &row, &col);for(int i = 0; i < row; ++i) {scanf("%s", &fence[i]);}for(int i = 0 ; i < row; ++i) {for(int j = 0; j < col; ++j) {sheep = wolf = 0;if (fence[i][j] != '#' && !visit[i][j]) {bfs(i, j);if (sheep != 0 || wolf != 0) {if (wolf >= sheep) {w += wolf;} else {s += sheep;}}}}}printf("%d %d", s, w);return 0;}
'알고리즘 풀이' 카테고리의 다른 글
백준 2667번 단지번호붙이기 (0) | 2018.01.05 |
---|---|
백준 2609번 최대공약수 최소공배수 (0) | 2018.01.01 |
백준 11650번 좌표 정렬하기 (0) | 2017.12.22 |
나는 왜 코딩을 못할까 (0) | 2017.12.21 |
백준 1019번 책 페이지 (0) | 2017.12.18 |