๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ธ์ ํ Node๋ฅผ ํ์ํ๋ DFS๋ฅผ ์ฌ์ฉํด์ผ๊ฒ ๋ค ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. DS์์ ๋ฐฐ์ด DFS๋ Adjacent List๋ฅผ ๋ง๋ค์ด์ ํ์ํ๋ ๋ฐฉ๋ฒ์ด๋ผ ์จ์ข ์ผ ๊ทธ ์๊ฐ๋ฐ์ ์ ๋ค์ด์ Adjacent List๋ง ๋ง๋ค๋ค๊ฐ ๋ค์ ๋ฏ์ด ๊ณ ์ณค๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํ ๋ณ์๋ 2์ฐจ์ vector์ visited ์ ๋ฌด๋ฅผ ํ๋จํ๋ 2์ฐจ์ ๋ฐฐ์ด์ด๋ฉด ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ถฉ์กฑํ ์ ์๋๋ก ๋ง๋ค ์ ์๋ค.
MxN Matrix ์ฒ๋ผ ์ฃผ์ด์ง๊ณ ์ธ์ ํ ์์ญ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฌผ์ด๋ณด๋ ๋ฌธ์ ์์๋ ๊ดํ 2์ฐจ์ ์ธ์ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ง ๋ง๊ณ dx, dy์ ๋ํ ๋ณ์๋ฅผ ํ ๋นํ์ฌ ์, ํ, ์ข, ์ฐ๋ฅผ ํ์ํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์ฑํ ์ ์๋ ์๊ฐ์ ๊ธฐ๋ฅด๋ ์ค..
#include <vector>
#include <iostream>
using namespace std;
int dx[4] = {0, 0, -1, 1};
int dy[4] = {1, -1, 0, 0};
int visited[100][100] = {0,};
int dfs(int y, int x, int height, int width, vector<vector<int>> picture) {
visited[y][x] = 1;
int count = 1;
for(int i =0 ; i < 4 ; i++) {
int x_pos = x+dx[i];
int y_pos = y+dy[i];
if(x_pos >= width || x_pos < 0 || y_pos >= height || y_pos < 0)
continue;
if(picture[y][x] == picture[y_pos][x_pos] && visited[y_pos][x_pos] == 0) {
count += dfs(y_pos, x_pos, height, width, picture);
}
}
return count;
}
// ์ ์ญ ๋ณ์๋ฅผ ์ ์ํ ๊ฒฝ์ฐ ํจ์ ๋ด์ ์ด๊ธฐํ ์ฝ๋๋ฅผ ๊ผญ ์์ฑํด์ฃผ์ธ์.
vector<int> solution(int m, int n, vector<vector<int>> picture) {
int number_of_area = 0;
int max_size_of_one_area = 0;
// ์ ์ญ๋ณ์ ์ด๊ธฐํ
for(int i = 0 ; i < m ; i++) {
for(int j = 0 ; j < n ; j++) {
visited[i][j] = 0;
}
}
// ๋ฐฉ๋ฌธํ ์ ์ด ์๊ณ ํด๋น ๋
ธ๋๊ฐ 0์ด ์๋ ๊ฒฝ์ฐ dfs๋ฅผ ํธ์ถ
for(int i = 0 ; i < m ; i++) {
for(int j = 0 ; j < n ; j++) {
if(picture[i][j] == 0 || visited[i][j] == 1)
continue;
else {
number_of_area++;
max_size_of_one_area = max(max_size_of_one_area,dfs(i,j, m, n, picture));
}
}
}
vector<int> answer(2);
answer[0] = number_of_area;
answer[1] = max_size_of_one_area;
return answer;
}