반응형
-문제
-코드
#include<queue>
#include<iostream>
using namespace std;
int dx[4] = {1,-1,0,0};
int dy[4] = { 0,0,1,-1 };
int main()
{
int n, m, v_cnt=0, o_cnt=0, v=0,o=0;
cin >> n >> m;
char map[250][250];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> map[i][j];
}
}
queue<pair<int,int> > q;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (map[i][j] == '#') continue;
if (map[i][j] != '#')
{
v_cnt = 0;
o_cnt = 0;
if (map[i][j] == 'v') v_cnt = 1;
if (map[i][j] == 'o') o_cnt = 1;
q.push({i,j});
map[i][j] = '#';
while (!q.empty())
{
pair<int, int> tmp = q.front();
q.pop();
for (int k = 0; k < 4; k++)
{
int xx = tmp.first + dx[k];
int yy = tmp.second + dy[k];
if (xx >=n || yy >= m || xx<0 || yy < 0) continue;
if (map[xx][yy] == '.')
{
q.push({xx,yy});
map[xx][yy] = '#';
}
else if (map[xx][yy] == 'v')
{
q.push({ xx,yy });
map[xx][yy] = '#';
v_cnt++;
}
else if (map[xx][yy] == 'o')
{
q.push({ xx,yy });
map[xx][yy] = '#';
o_cnt++;
}
}
}
if (v_cnt < o_cnt) v_cnt = 0;
else o_cnt = 0;
v += v_cnt;
o += o_cnt;
}
}
}
cout << o << ' ' << v;
return 0;
}
반응형
'이론 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] level2 구명보트 (그리디 + 투포인터) (0) | 2022.08.29 |
---|---|
[백준] 1325번 효율적인 해킹 (DFS) (0) | 2022.08.27 |
[백준] 1388번 바닥 장식 (BFS) (0) | 2022.08.26 |
[백준] 2110번 공유기 설치 (이분 탐색) (0) | 2022.08.25 |
[백준] 16401번 과자 나눠주기 (이분 탐색) (0) | 2022.08.25 |