๋์ด๋ : ๊ณจ๋ 5
๊ฑธ๋ฆฐ ์๊ฐ : 25๋ถ
๋ฌธ์
์ ๋ก์์ฝ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
๋ฌธ์
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค.
ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก), B(ํ๋) ์ค ํ๋๋ฅผ ์์น ํ ๊ทธ๋ฆผ์ด ์๋ค. ๊ทธ๋ฆผ์ ๋ช ๊ฐ์ ๊ตฌ์ญ์ผ๋ก ๋๋์ด์ ธ ์๋๋ฐ, ๊ตฌ์ญ์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋, ๊ฐ์ ์์์ด ์ํ์ข์ฐ๋ก ์ธ์ ํด ์๋ ๊ฒฝ์ฐ์ ๋ ๊ธ์๋ ๊ฐ์ ๊ตฌ์ญ์ ์ํ๋ค. (์์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ์์์ด๋ผ ํ๋ค)
์๋ฅผ ๋ค์ด, ๊ทธ๋ฆผ์ด ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ ์ด 4๊ฐ์ด๋ค. (๋นจ๊ฐ 2, ํ๋ 1, ์ด๋ก 1) ํ์ง๋ง, ์ ๋ก์์ฝ์ธ ์ฌ๋์ ๊ตฌ์ญ์ 3๊ฐ ๋ณผ ์ ์๋ค. (๋นจ๊ฐ-์ด๋ก 2, ํ๋ 1)
๊ทธ๋ฆผ์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
ํ์ด
- ์ ๋ ฅ์ด 10^2์ด๋ฏ๋ก ์์
- ์ญ ํ์ด๋ณด๋ฉด์ ์์ด ๊ฐ์ ๊ณณ์ memo์ ํ์ํ๊ณ ์๋ ๊ณณ์ ๋ค์ ์ฐพ๋ ์์ผ๋ก ๊ตฌํ
- ์ต์ ์ ๊ฒฝ์ฐ ๋ชจ๋ ์์๊ฐ ๋ค๋ฅธ ์์ด๋ผ๊ณ ํ๋ฉด 10^4๋งํผ ์ฐพ์๋ด์ผํจ => ์๊ฐ๋ณต์ก๋ ๊ด์ฐฎ์
- ์ ๋ก ์์ฝ์ธ ๊ฒฝ์ฐ๋ G๋ฅผ R๋ก ๋ฐ๊พผ mapRG๋ฅผ ์ฌ์ฉ
์ฝ๋
#include <iostream>
#include <string>
#include <queue>
using namespace std;
char map[101][101];
char mapRG[101][101];
int direction[4][2] = { {0,1}, {0,-1}, {1,0}, {-1, 0} };
int N;
int areaNum(char map[][101]) {
int memo[101][101];
fill(&memo[0][0], &memo[100][100], -1);
int res = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (memo[i][j] != -1)
continue;
char color = map[i][j];
queue<pair<int, int>> que;
que.push(make_pair(i, j));
while (!que.empty()) {
pair<int, int> pos = que.front(); que.pop();
for (int k = 0; k < 4; k++) {
int x = pos.first + direction[k][0];
int y = pos.second + direction[k][1];
if (x < 0 || y < 0 || x >= N || y >= N)
continue;
if (memo[x][y] != -1)
continue;
if (map[x][y] == color) {
memo[x][y] = 1;
que.push(make_pair(x, y));
}
}
}
res++;
}
}
return res;
}
int main() {
cin >> N;
for (int i = 0; i < N; i++) {
string s; cin >> s;
for (int j = 0; j < s.length(); j++) {
char color = s[j];
map[i][j] = color;
if (color == 'G') {
color = 'R';
}
mapRG[i][j] = color;
}
}
cout << areaNum(map) << " " << areaNum(mapRG) << endl;
}
๊ฒฐ๊ณผ
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 16236 :: ์๊ธฐ ์์ด (0) | 2021.05.03 |
---|---|
[c++] BOJ 1987 :: ์ํ๋ฒณ (0) | 2021.04.28 |
[c++] BOJ 14502 :: ์ฐ๊ตฌ์ (0) | 2021.04.22 |
[c++] BOJ 1238 :: ํํฐ (0) | 2021.04.21 |
[c++] BOJ 1916 :: ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (0) | 2021.04.12 |
Comment