๐งจ ๋ฐฑ์ค 10026๋ฒ ์ ๋ก์์ฝ
๋ฌธ์ ๋์ด๋ : ๊ณจ๋5
๋ฌธ์ ๋งํฌ : www.acmicpc.net/problem/10026
10026๋ฒ: ์ ๋ก์์ฝ
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค. ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก)
www.acmicpc.net
๐งจ ์๊ณ ๋ฆฌ์ฆ ์ ํ ๋ฐ C++ ์ฝ๋
์ ๊ธฐ๋๋ฐฐ์ถ ๋ฌธ์ ์ ํฌ๊ฒ ๋ค๋ฅผ ๊ฑฐ ์๊ณ , ๋์ 0๊ณผ 1์ ์ด๋ถ๋ฒ์ด ์๋๋ผ 0, R, G, B๋ฅผ ๊ตฌ๋ถํด์ผ ํ๋ ์ ๋๊ฐ ์กฐ๊ธ ๋ ๋์ด๋ ์๋ค๊ณ ๋ณผ ์ ์๋ค. ์ฌํ๊น์ง ๊ทธ๋ํ ๊ด๋ จ ๋ฌธ์ ๋ค ๊ณ์ BFS๋ก ๊ตฌํํ์ด์ ์ด๋ฒ์๋ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ DFS๋ก ๊ตฌํํ๋ค. ์กฐ๊ธ ์ด๋ ต๋ค๊ณ ์๊ฐํ๋๋ฐ ๋ง์ ์ง๋ณด๋ ๋ณ๊ฑฐ ์๋ ๊ฑฐ ๊ฐ๋ค.
+) ์ฒ์์ ๊ณ์ 4๊ฐ ์ ๋์ค๊ณ 20์ด ๋์ค๊ธธ๋ ๋ญ๊ฐ ๋ฌธ์ ๊ฐ ์ถ์๋๋ฐ isMarked์ G ๋ฐฐ์ด์ main์๋ค ์ ์ธํด์ฃผ๊ณ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํด์ ๊ทธ๋ฌ๋ค. ์ฌ๊ทํจ์๋ผ ์ ์ญ์ผ๋ก ์ ์ธํ๋ ๊ฒ ๋ง์๋ค.
+) 1๊ธ์์ฉ ์ ๋ ฅ๋ฐ๋๊ฑฐ ์ ๋ฒ์ %1d ์ฐ๋ฉด ๋๊ฑฐ ์๊ฐ๋์ ์ด๋ฒ์ %1c๋ฅผ ์ผ๋ค. ๊ทผ๋ฐ ํ๊ธ์๋ง ์ ๋ ฅ๋ฐ์ผ๋๊น ์ค๋ฐ๊ฟ ์ํฐ๋ ์ธ์๋๋๋ฐ, ์ฒ์์ ์ด๊ฑธ ๋ชจ๋ฅด๊ณ ๊ณ์ ํค๋งค๋ค๊ฐ ์ ๋ ฅ ํ ๋ scanf("%c", &c); ์ด๊ฑฐ ํ๋ ์ถ๊ฐํด์คฌ๋ค. ์ฌ๋ฌ๋ชจ๋ก ์ข ์ค๋ ๊ฑธ๋ฆฐ ๋ฌธ์ ์์ด..
#include <iostream>
#include <queue>
using namespace std;
int N;
int dx[] = { -1, 1, 0, 0 }; // ์ข์ฐ์ํ
int dy[] = { 0, 0, -1, 1 };
int G[100][100] = { 0 };
int isMarked[100][100] = { false };
void recursiveDFS(int x, int y, int color) {
if (isMarked[x][y]) return;
else {
isMarked[x][y] = true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < 0 || nx >= N || ny < 0 || ny >= N) continue;
if (G[nx][ny] == 0) continue;
if (G[nx][ny] == color && isMarked[nx][ny] == false) {
recursiveDFS(nx, ny, color);
}
}
return;
}
}
int main(void) {
cin >> N;
char c;
scanf("%c", &c);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
scanf("%1c", &c);
if (c == 'R') {
G[i][j] = 1;
}
else if (c == 'G') {
G[i][j] = 2;
}
else {
G[i][j] = 3;
}
}
scanf("%c", &c);
}
int count = 0;
for (int x = 0; x < N; x++) {
for (int y = 0; y < N; y++) {
if (G[x][y] == 0) continue;
else if (!isMarked[x][y]) {
recursiveDFS(x, y, G[x][y]);
count++;
}
}
}
cout << count << ' ';
// 2. ์ ๋ก์์ฝ
count = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
isMarked[i][j] = false;
}
}
for (int x = 0; x < N; x++) {
for (int y = 0; y < N; y++) {
if (G[x][y] == 2)
G[x][y] = 1;
}
}
for (int x = 0; x < N; x++) {
for (int y = 0; y < N; y++) {
if (G[x][y] == 0) continue;
else if (!isMarked[x][y]) {
recursiveDFS(x, y, G[x][y]);
count++;
}
}
}
cout << count << '\n';
}
'Problem Solving > BOJ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 10282๋ฒ ํดํน (C++ ์ฝ๋) (0) | 2021.02.06 |
---|---|
[BOJ] ๋ฐฑ์ค 1707๋ฒ ์ด๋ถ๊ทธ๋ํ (C++ ์ฝ๋) (0) | 2021.01.24 |
[BOJ] ๋ฐฑ์ค 1012๋ฒ ์ ๊ธฐ๋ ๋ฐฐ์ถ (C++ ์ฝ๋) (0) | 2021.01.23 |
[BOJ] ๋ฐฑ์ค 2178๋ฒ ๋ฏธ๋กํ์ (C++ ์ฝ๋) (0) | 2021.01.22 |
[BOJ] ๋ฐฑ์ค 2644๋ฒ ์ด์๊ณ์ฐ (C++ ์ฝ๋) (0) | 2021.01.22 |