https://www.acmicpc.net/problem/2583
๋ฌธ์
๋๊ธ์ ๊ฐ๊ฒฉ์ด 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๊ฐ์ ์ง์ฌ๊ฐํ๋ค์ด ๋ชจ๋์ข ์ด ์ ์ฒด๋ฅผ ์ฑ์ฐ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ถ๋ฆฌ๋์ด ๋๋์ด์ง๋ ์์ญ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋์งธ ์ค์๋ ๊ฐ ์์ญ์ ๋์ด๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ถ๋ ฅํ๋ค.
ํ์ด
bfs๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
์ฒ์ ์ ๋ ฅ๋ฐ์์ ์ฌ๊ฐํ์ ํ์ํ๋๊ฒ๋ง ์ ๊ณ ๋ คํ๋ฉด ๋๋ค.
์
๋ ฅ์ด "์ขํ"๋ก ์ฃผ์ด์ง๊ธฐ ๋๋ฌธ์
ํ์์ ์ฌ์ฉํ๋ ํ,์ด ๊ฐ๊ณผ๋ ๋ค๋ฅด๊ฒ ํ์ด์ผ ํ๋๋ฐ,
๋๋ ์๋ ๋ฐฉ์์ผ๋ก ํ๋ฅผ ์๊ฐํด์คฌ๋ค.
์ด๋ x์ขํ๋ ์ด์, y์ขํ๋ ํ์ ์๋ฏธํ๋ค.
while(k--){
int x1,y1,x2,y2;
cin >> x1 >> y1 >> x2 >> y2;
for(int i=y1; i<y2; i++)
for(int j=x1; j<x2; j++)
board[i][j] = 1;
}
์ ๋ ฅ๊ฐ์ ์ด์ฐจ์๋ฐฐ์ด์ ์ ์ฅํ ๋ ์ ๊ฒฝ์จ์ ์ ์ฅํด์คฌ๋ค.
// Authored by : seondal
// ํ์ด : https://whkakrkr.tistory.com/
// Co-authored by : -
//#include <bits/stdc++.h>
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
int board[101][101] = {0};
int main() {
int m,n,k;
cin >> m >> n >> k;
while(k--){
int x1,y1,x2,y2;
cin >> x1 >> y1 >> x2 >> y2;
for(int i=y1; i<y2; i++)
for(int j=x1; j<x2; j++)
board[i][j] = 1;
}
int cnt = 0;
vector<int> areas;
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(board[i][j] == 1) continue;
cnt ++;
int area = 0;
queue<pair<int,int>> q;
q.push({i,j});
board[i][j] = 1;
while(!q.empty()){
auto c = q.front();
q.pop();
area++;
for(int dir=0; dir<4; dir++){
int x = c.first + dx[dir];
int y = c.second + dy[dir];
if(x<0 || x>=m || y<0 || y>=n) continue;
if(board[x][y] == 1) continue;
q.push({x,y});
board[x][y] = 1;
}
}
areas.push_back(area);
}
}
sort(areas.begin(), areas.end());
cout << cnt << "\n";
for(int i=0; i<areas.size(); i++) cout << areas[i] << " ";
return 0;
}
/**/
'๐ Baaaaaarking > 0x09๊ฐ - BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ S1][C++] 2468๋ฒ: ์์ ์์ญ (76%) (0) | 2022.04.07 |
---|---|
[BOJ S1][C++] ๋ฐฑ์ค 2667๋ฒ : ๋จ์ง๋ฒํธ ๋ถ์ด๊ธฐ (6%) (0) | 2022.03.24 |
[BOJ G4][C++] ๋ฐฑ์ค 5427๋ฒ : ๋ถ (0) | 2022.03.19 |
[BOJ G4][C++] ๋ฐฑ์ค 4179๋ฒ: ๋ถ! (0) | 2022.03.16 |
[BOJ S2][C++] ๋ฐฑ์ค 7562๋ฒ: ๋์ดํธ์ ์ด๋ (0) | 2022.03.15 |