어읽로꾸거
BOJ 3187 양치기 꿍 본문
링크
https://www.acmicpc.net/problem/3187
3187번: 양치기 꿍
문제 양치기 꿍은 맨날 늑대가 나타났다고 마을 사람들을 속였지만 이젠 더이상 마을 사람들이 속지 않는다. 화가 난 꿍은 복수심에 불타 아예 늑대들을 양들이 있는 울타리안에 마구 집어넣어 양들을 잡아먹게 했다. 하지만 양들은 보통 양들이 아니다. 같은 울타리 영역 안의 양들의 숫자가 늑대의 숫자보다 더 많을 경우 늑대가 전부 잡아먹힌다. 물론 그 외의 경우는 양이 전부 잡아먹히겠지만 말이다. 꿍은 워낙 똑똑했기 때문에 이들의 결과는 이미 알고있다. 만약 빈
www.acmicpc.net
풀이
구역별로 BFS를 돌리며 카운팅을 해줌!
코드
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
int r, c, r_v_c, r_k_c, t_v_c, t_k_c;
int xl[] = {0,0,-1,1};
int yl[] = {1,-1,0,0};
char map[250][250], visit[250][250];
queue < pair<int, int> > q;
int check(int x, int y){
if(0<=x&&x<r&&0<=y&&y<c)
return 1;
return 0;
}
int main() {
//freopen("input.txt","r",stdin);
cin>>r>>c;
getchar();
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
scanf("%c",&map[i][j]);
}
getchar();
}
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
if(map[i][j]!='#'&&!visit[i][j]){
t_v_c=t_k_c=0;
q.push({i,j});
visit[i][j] = 1;
while(!q.empty()){
int x = q.front().first;
int y = q.front().second;
q.pop();
if(map[x][y]=='v')
t_v_c++;
if(map[x][y]=='k')
t_k_c++;
for(int ii=0;ii<4;ii++){
int nx = x+xl[ii];
int ny = y+yl[ii];
if(check(nx,ny)&&map[nx][ny]!='#'&&!visit[nx][ny]){
visit[nx][ny]=1;
q.push({nx,ny});
}
}
}
if(t_v_c<t_k_c){
r_k_c+=t_k_c;
}
else{
r_v_c+=t_v_c;
}
}
}
}
cout<<r_k_c<<" "<<r_v_c;
}
'알고리즘' 카테고리의 다른 글
BOJ 17281 ⚾(삼성 A형 기출) (0) | 2020.05.14 |
---|---|
BOJ 15647 로스팅하는 엠마도 바리스타입니다 (0) | 2019.09.19 |
BOJ 14613 너의 티어는? (0) | 2019.09.15 |
BOJ 1038 감소하는 수 (0) | 2019.09.15 |
BOJ 17141 연구소 2 (0) | 2019.09.13 |