๐ป
[๋ฐฑ์ค] DFS์BFS - 2583. ์์ญ ๊ตฌํ๊ธฐ(BFSํ์ด) ๋ณธ๋ฌธ
[๋ฐฑ์ค] DFS์BFS - 2583. ์์ญ ๊ตฌํ๊ธฐ(BFSํ์ด)
๋ํจ๋ 2020. 3. 8. 19:01๋ฌธ์
๋๊ธ์ ๊ฐ๊ฒฉ์ด 1์ธ M×N(M,N≤100)ํฌ๊ธฐ์ ๋ชจ๋์ข ์ด๊ฐ ์๋ค. ์ด ๋ชจ๋์ข ์ด ์์ ๋๊ธ์ ๋ง์ถ์ด K๊ฐ์ ์ง์ฌ๊ฐํ์ ๊ทธ๋ฆด ๋, ์ด๋ค K๊ฐ์ ์ง์ฌ๊ฐํ์ ๋ด๋ถ๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ์ด ๋ช ๊ฐ์ ๋ถ๋ฆฌ๋ ์์ญ์ผ๋ก ๋๋์ด์ง๋ค.
์๋ฅผ ๋ค์ด M=5, N=7 ์ธ ๋ชจ๋์ข ์ด ์์ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ง์ฌ๊ฐํ 3๊ฐ๋ฅผ ๊ทธ๋ ธ๋ค๋ฉด, ๊ทธ ๋๋จธ์ง ์์ญ์ <๊ทธ๋ฆผ 2>์ ๊ฐ์ด 3๊ฐ์ ๋ถ๋ฆฌ๋ ์์ญ์ผ๋ก ๋๋์ด์ง๊ฒ ๋๋ค.
<๊ทธ๋ฆผ 2>์ ๊ฐ์ด ๋ถ๋ฆฌ๋ ์ธ ์์ญ์ ๋์ด๋ ๊ฐ๊ฐ 1, 7, 13์ด ๋๋ค.
M, N๊ณผ K ๊ทธ๋ฆฌ๊ณ K๊ฐ์ ์ง์ฌ๊ฐํ์ ์ขํ๊ฐ ์ฃผ์ด์ง ๋, K๊ฐ์ ์ง์ฌ๊ฐํ ๋ด๋ถ๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ์ด ๋ช ๊ฐ์ ๋ถ๋ฆฌ๋ ์์ญ์ผ๋ก ๋๋์ด์ง๋์ง, ๊ทธ๋ฆฌ๊ณ ๋ถ๋ฆฌ๋ ๊ฐ ์์ญ์ ๋์ด๊ฐ ์ผ๋ง์ธ์ง๋ฅผ ๊ตฌํ์ฌ ์ด๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ M๊ณผ N, ๊ทธ๋ฆฌ๊ณ K๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. M, N, K๋ ๋ชจ๋ 100 ์ดํ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ K๊ฐ์ ์ค์๋ ํ ์ค์ ํ๋์ฉ ์ง์ฌ๊ฐํ์ ์ผ์ชฝ ์๋ ๊ผญ์ง์ ์ x, y์ขํ๊ฐ๊ณผ ์ค๋ฅธ์ชฝ ์ ๊ผญ์ง์ ์ x, y์ขํ๊ฐ์ด ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. ๋ชจ๋์ข ์ด์ ์ผ์ชฝ ์๋ ๊ผญ์ง์ ์ ์ขํ๋ (0,0)์ด๊ณ , ์ค๋ฅธ์ชฝ ์ ๊ผญ์ง์ ์ ์ขํ๋(N,M)์ด๋ค. ์ ๋ ฅ๋๋ K๊ฐ์ ์ง์ฌ๊ฐํ๋ค์ด ๋ชจ๋์ข ์ด ์ ์ฒด๋ฅผ ์ฑ์ฐ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ถ๋ฆฌ๋์ด ๋๋์ด์ง๋ ์์ญ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋์งธ ์ค์๋ ๊ฐ ์์ญ์ ๋์ด๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ1
5 7 3
0 2 4 4
1 1 2 5
4 0 6 2
์์ ์ถ๋ ฅ1
3
1 7 13
์๊ฐ
์ฃผ์ด์ง ๋ฌธ์ ์์ (x, y) ์ขํ๊ฐ ์ผ์ชฝ ์๋์์๋ถํฐ ์์์ธ๋ฐ, ๊ทธ๋์ ๋ฌธ์ ํ์ด ํ ๋ ์ผ์ชฝ ์๋ถํฐ๋ก ํด์ ํ์์ผ๋๊น ๋ฐ๊ฟ์ ์ต์ํ ํํ๋ก ๋ง๋ค์ด ํ์๋ค.
์ง์ฌ๊ฐํ์ ํด๋นํ๋ ์์ญ์๋ 1์ ๊ฐ์ ๋ฃ์๊ณ , ์ฐ๋ฆฌ๋ ๋ถ๋ฆฌ๋ ์์ญ์ ๊ด์ฌ์ ๋์ด์ผํ๋ฏ๋ก map[i][j] = 0 ์ผ๋ ๋ฐฉ๋ฌธํด์ค๋ค. cnt๋ณ์๋ฅผ ์ด์ฉํด์ ๋ฐฉ๋ฌธํ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐํด์คฌ๊ณ ๊ทธ๋ ๊ฒ ๊ตฌํ ๊ฐ์ ๋ฒกํฐ์ ๋ฃ์ด์คฌ๋ค.
๋ฌธ์ ์์ฒด๋ ์ผ๋ฐ์ ์ธ BFS, DFS๋ฌธ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ค์ด ๊ฒ์ ์๋์์ผ๋ ์ขํ์์ ๊ผฌ์ฌ์ ์๊ฐ์ ์ก์๋จน์๋ค. (x, y) -> (N, M) ์ธ๋ฐ ์ ๋ ฅ ๋ฐ์ ์์๋๋ก for๋ฌธ ๋ ๋ m, n์ผ๋ก ํด์ ํ์๋ค๊ฐ ๋ค ๊ผฌ์ด๊ณ ๋ต์ด ์ด์ํ๊ฒ ๋์์ ํ์ฐธ์ ํค๋งธ๋ค.
์ด์ ์ ํ์๋ ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ ๋ฌธ์ ๋ ๋น์ทํ ๋ฌธ์ ์๋ค. ๋จ์ง๋ DFS๋ก ํ์๊ณ , ์ด ๋ฌธ์ ๋ BFS๋ฅผ ์ด์ฉํด์ ํ์๋ค. ๋น๊ตํด์ ๋ณด์๋ ์ข์ ๊ฒ ๊ฐ๋ค.
์์ฑํ ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#include <iostream>
#include <queue>
#include <algorithm>
#include <vector>
using namespace std;
int m,n,k;
int map[101][101] = {0,};
bool visited[101][101];
vector<int> v;
//์, ํ, ์ข, ์ฐ
int dx[] = {-1,1,0,0};
int dy[] = {0,0,-1,1};
int x, y, z, w;
int cnt;
void BFS(int a, int b){
cnt = 1;
queue<pair<int,int> > q;
q.push(make_pair(a, b));
visited[a][b] = true;
while(!q.empty()){
int x = q.front().first;
int y = q.front().second;
q.pop();
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>=m){
continue;
}
if(map[nx][ny]==0 && !visited[nx][ny]){
cnt ++;
visited[nx][ny] = true;
q.push(make_pair(nx, ny));
}
}
}
v.push_back(cnt);
}
void draw(int a, int b, int c, int d){
for(int i=a; i<c; i++){
for(int j=b; j<d; j++){
map[i][j] = 1;
}
}
}
int main(int argc, const char * argv[]) {
// insert code here...
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> m >> n >> k;
for(int i=0; i<k; i++){
cin >> x >> y >> z >> w;
draw(x, y, z, w);
}
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(map[i][j]==0 && !visited[i][j]){
BFS(i, j);
}
}
}
sort(v.begin(), v.end());
cout << v.size() << "\n";
for(int i=0; i<v.size(); i++){
cout << v[i] << " ";
}
return 0;
}
Colored by Color Scripter
|
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ํ์ด Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ์๋ฎฌ๋ ์ด์ - 2164. ์นด๋2 (0) | 2020.03.13 |
---|---|
[๋ฐฑ์ค] ๋ฐฑํธ๋ํน - 2210. ์ซ์ํ ์ ํ (0) | 2020.03.08 |
[๋ฐฑ์ค] ๋ฌธ์์ด์ฒ๋ฆฌ - 10808. ์ํ๋ฒณ ๊ฐ์ (0) | 2020.03.08 |
[๋ฐฑ์ค] ๋ฌธ์์ด์ฒ๋ฆฌ - 9935. ๋ฌธ์์ด ํญ๋ฐ (0) | 2020.03.05 |
[๋ฐฑ์ค] ๋ค์ต์คํธ๋ผ - 6118. ์จ๋ฐ๊ผญ์ง(๋ฌธ์ ํธ๋์ค) (0) | 2020.03.04 |