N x N ํฌ๊ธฐ์ ์ง๋์์ ์ง์ 1๋ก ํ์๋๋ค.
๋๊ฐ์ ์ ๊ฐ์ ๋จ์ง๋ก ์ทจ๊ธํ์ง ์๋๋ค. ์, ํ, ์ข, ์ฐ์ ๊ฒฝ์ฐ๋ง ๊ฐ์ ๋จ์ง์ด๋ค.
์ถ๋ ฅ: ๋จ์ง ์, ๊ฐ ๋จ์ง๋ณ ์ง์ ์๋ฅผ ํ ์ค ์ฉ ์ถ๋ ฅํ๋ค.
current ์ขํ ๊ธฐ์ค ์, ํ, ์ข, ์ฐ๋ฅผ ๋ฐฉ๋ฌธํ์ง ์์๊ณ , ์ขํ๊ฐ 0๋ณด๋ค ํฌ๊ณ N๋ณด๋ค ์์ผ๋ฉฐ (์ขํ์์ ๋ฒ์ด๋์ง ์์) 1์ ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด count++์ ํ๊ณ , ์ฌ๊ท๊ฐ ๋๋๊ณ ์ฒ์ ํธ์ถํ๋ ํจ์๋ก ๋ฆฌํดํ๋ฉด ํด๋น count๋ฅผ deque์ ์ถ๊ฐํ๋ค.
์๋ฃ ํ, result์ ์๋ ๊ฑธ sort๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ ์ถ๋ ฅํ๋ค.
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
int cnt;
int graph[25][25];
bool visited[25][25];
int dx[] = {-1, 0, 1, 0}; int dy[] = {0, 1, 0, -1};
void DFS(int x, int y, int N){
cnt++;
visited[x][y] = true;
for(int i=0; i<4; i++){
int nx = x + dx[i]; int ny = y + dy[i];
if(nx < 0 || ny < 0 || nx >=N || ny >= N) continue;
if(graph[nx][ny] == 1 && !visited[nx][ny]) DFS(nx, ny, N);
}
}
int main(){
int N;
scanf("%d", &N);
deque<int> result;
for(int i=0; i<N; i++){
string s; cin >> s;
for(int j=0; j<N; j++) graph[i][j] = s[j]-'0';
}
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(graph[i][j] == 1 && !visited[i][j]) {
cnt = 0;
DFS(i, j, N);
result.push_back(cnt);
}
}
}
sort(result.begin(), result.end());
printf("%d\n", result.size());
for(int n: result) printf("%d\n", n);
}
[๋ฐฑ์ค(BOJ)] 1303๋ฒ: ์ ์ - ์ ํฌ (DFS/BFS, C++) (0) | 2021.03.02 |
---|---|
[๋ฐฑ์ค(BOJ)] 4963๋ฒ: ์ฌ์ ๊ฐ์ (DFS/BFS, C++) (0) | 2021.03.02 |
[๋ฐฑ์ค(BOJ)] 11047๋ฒ: ๋์ 0 (Greedy Algorithm(๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ), C++) (0) | 2021.02.26 |
[๋ฐฑ์ค(BOJ)] 9466๋ฒ: ํ ํ๋ก์ ํธ (DFS/BFS, C++) (0) | 2021.02.26 |
[๋ฐฑ์ค(BOJ)] 2331๋ฒ: ๋ฐ๋ณต์์ด (DFS/BFS, C++) (0) | 2021.02.26 |