ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준알고리즘 2019. 8. 29. 00:30

    #include<iostream>
    #include<cstdio>
    #include<utility>
    #include<queue>
    
    using namespace std;
    
    int r, c;
    int map[250][250];
    bool d[250][250];
    int dx[] = { 0,0,1,-1 };
    int dy[] = { 1,-1,0,0 };
    int wolf;
    int lambs;
    
    void bfs(int x, int y) {
    	queue<pair<int, int>> q;
    	q.push({ x,y });
    	d[x][y] = true;
    	int wolv = 0; int lamb = 0;
    	if (map[x][y] == 2)
    		wolv++;
    	if (map[x][y] == 1)
    		lamb++;
    	while (!q.empty()) {
    		x = q.front().first; y = q.front().second;
    		q.pop();
    		for (int i = 0; i < 4; i++) {
    			int nx = x + dx[i]; int ny = y + dy[i];
    			if (nx >= 0 && nx < r && ny >= 0 && ny < c) {
    				if (map[nx][ny] != 3 && d[nx][ny] == false) {
    					d[nx][ny] = true;
    					if (map[nx][ny] == 2)
    						wolv++;
    					if (map[nx][ny] == 1)
    						lamb++;
    					q.push({ nx,ny });
    				}
    			}
    		}
    	}
    	if (wolv < lamb) lambs += lamb;
    	else wolf += wolv;
    }
    
    int main() {
    	std::ios::sync_with_stdio(false);
    	cin >> r >> c;
    	for (int i = 0; i < r; i++) {
    		for (int j = 0; j < c; j++) {
    			char x;
    			cin >> x;
    			if (x == '.') {
    				map[i][j] = 0;
    			}
    			if (x == 'o') {
    				map[i][j] = 1;
    			}
    			if (x == 'v') map[i][j] = 2;
    			if (x == '#')map[i][j] = 3;
    		}
    	}
    	for (int i = 0; i < r; i++) {
    		for (int j = 0; j < c; j++) {
    			if (map[i][j] != 3 && d[i][j] == false) {
    				bfs(i, j);
    			}
    		}
    	}
    	cout << lambs << " " << wolf << '\n';
        return 0;
    }

     

    너무너무너무 쉬운 BFS문제 푸는데 20분정도 걸린거같다.

    울타리가 아닌 곧에서 BFS하고, 그안에서 늑대와 양비교해서 BFS 끝날때 비교후, 전역변수에 더해주고를 반복하면, 문제가 쉽게풀린다.

     

    '백준알고리즘' 카테고리의 다른 글

    합이 0인 네 정수  (0) 2019.08.31
    말이 되고픈 원숭이  (0) 2019.08.31
      (0) 2019.08.29
    토마토  (0) 2019.08.27
    백조의 호수  (0) 2019.08.27

    댓글

Designed by Tistory.