728x90
1. 문제 설명
2. 풀이 과정
- 문제 해결의 흐름
- 입력 받은 배열을 이중for문을 돌며 각 국의 국력을 구한다.
- bfs를 통해 각 국의 병사 수를 구해 국력을 계산하자.
- 나의 코드
#include <iostream>
#include <queue>
#include <string>
#include <algorithm>
using namespace std;
int N, M;
char battleground[101][101];
bool visited[101][101];
int W_power = 0; // 아군 국력
int B_power = 0; // 적군 국력
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
// bfs 구현
int bfs(int row, int col, char color) {
queue<pair<int, int> > q;
q.push(make_pair(row,col));
visited[row][col] = true;
int cnt = 1;
while (!q.empty()) {
int now_row = q.front().first;
int now_col = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int new_row = now_row + dx[i];
int new_col = now_col + dy[i];
if (new_row < 0 || new_row >= M || new_col < 0 || new_col >= N) continue;
if (!visited[new_row][new_col] && battleground[new_row][new_col] == color) {
visited[new_row][new_col] = true;
cnt++;
q.push(make_pair(new_row, new_col));
}
}
}
return cnt;
}
int main() {
// 입력 받기
cin >> N >> M; // N : 열, M : 행
for (int i = 0; i < M; i++) {
string str;
cin >> str;
str.copy(battleground[i], str.length() + 1);
}
fill_n(&visited[0][0], M * N, false);
for (int i = 0; i < M; i++) { // i : 행, j : 열
for (int j = 0; j < N; j++) {
if (!visited[i][j]) {
int power = bfs(i, j, battleground[i][j]);
if (battleground[i][j] == 'W') W_power += power * power;
else B_power += power * power;
}
}
}
cout << W_power << " " << B_power;
return 0;
}
- 이 문제를 통해 알 수 있는 것들
- 입력 받은 문자열을 배열로 저장하는 방법은? 또한 배열을 문자열로 바꾸는 방법은?
// 1. 문자열(string) to char array
string str;
char arr[5];
cin >> str;
str.copy(arr, str.length() + 1);
// 2. 문자열(string) to int array
string str_int;
int arr_int[5];
cin >> str_int;
for (int i = 0; i < str_int.length(); i++) {
arr_int[i] = str_int[i] - '0';
}
// 3. int 배열을 string 문자열로 나타내는 법
int arr_int[5] = {1, 2, 3, 4, 5};
string str_int;
for (int i = 0; i < 5; ++i) {
str_int += to_string(arr_int[i]);
}
// 4. char 배열을 string 문자열로 나타내는 법
char arr[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
string str(arr);
3. 후기
킵고잉
'Algorithm > graph' 카테고리의 다른 글
[백준] 14226 이모티콘 C++ (1) | 2024.04.20 |
---|---|
[백준] 6593 상범 빌딩 C++ (0) | 2024.04.20 |
[벡준] 17086 아기 상어 2 C++ (1) | 2024.04.19 |
[백준] 2206 벽 부수고 이동하기 C++ (1) | 2024.04.19 |
[백준] 2178 미로 탐색 C++ (0) | 2024.04.17 |