※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 3187번 문제인 양치기 꿍이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/3187
3187번: 양치기 꿍
입력의 첫 번째 줄에는 각각 영역의 세로와 가로의 길이를 나타내는 두 개의 정수 R, C (3 ≤ R, C ≤ 250)가 주어진다. 다음 각 R줄에는 C개의 문자가 주어지며 이들은 위에서 설명한 기호들이다.
www.acmicpc.net
3184번 문제(링크)와 양을 나타내는 문자('k'와 'o')만이 다른, 사실상 같은 문제이다. 해당 문제의 풀이글을 참고해 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
#include <queue>
#include <vector>
using namespace std;
int R, C;
string board[250];
int kcnt, vcnt;
int dr[4] = { 1,-1,0,0 };
int dc[4] = { 0,0,1,-1 };
void bfs(int qr, int qc) {
int K = 0, V = 0;
if (board[qr][qc] == 'k') K++;
else if (board[qr][qc] == 'v') V++;
board[qr][qc] = '#';
queue<pair<int, int>> que;
que.push(make_pair(qr, qc));
while (!que.empty()) {
int r = que.front().first, c = que.front().second; que.pop();
for (int i = 0; i < 4; i++) {
int rr = r + dr[i], cc = c + dc[i];
if (rr < 0 || rr >= R || cc < 0 || cc >= C || board[rr][cc] == '#') continue;
if (board[rr][cc] == 'k') K++;
else if (board[rr][cc] == 'v') V++;
board[rr][cc] = '#';
que.push(make_pair(rr, cc));
}
}
if (K > V) kcnt += K;
else vcnt += V;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> R >> C;
for (int r = 0; r < R; r++) cin >> board[r];
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
if (board[r][c] != '#') {
bfs(r, c);
}
}
}
cout << kcnt << ' ' << vcnt;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 3186 // C++] 소변기 (0) | 2023.02.17 |
---|---|
[BOJ 14846 // C++] 직사각형과 쿼리 (0) | 2023.02.17 |
[BOJ 26171 // C++] An Interactive Problem (0) | 2023.02.17 |
[BOJ 27487 // C++] One and Two (0) | 2023.02.17 |
[BOJ 1185 // C++] 유럽여행 (0) | 2023.02.16 |