๋ฌธ์ :
2583๋ฒ: ์์ญ ๊ตฌํ๊ธฐ
์ฒซ์งธ ์ค์ M๊ณผ N, ๊ทธ๋ฆฌ๊ณ K๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. M, N, K๋ ๋ชจ๋ 100 ์ดํ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ K๊ฐ์ ์ค์๋ ํ ์ค์ ํ๋์ฉ ์ง์ฌ๊ฐํ์ ์ผ์ชฝ ์๋ ๊ผญ์ง์ ์ x, y์ขํ๊ฐ๊ณผ ์ค
www.acmicpc.net
๋ถ์ :
์ 2667(๋จ์ง ๋ฒํธ ๋ถ์ด๊ธฐ)๋ฒ์ ๋น์ทํ ๋ฌธ์ ์ด๋ ์ฃผ์ด์ง๋ ์ ๋ ฅ๊ฐ์ด ์กฐ๊ธ ๋ค๋ฅด๋ค !
๋ฌธ์ ๋ฅผ ๋ณด๋ฉด ์ผ์ชฝ ์๋ ๊ผญ์ง์ ๊ณผ ์ค๋ฅธ์ชฝ ์ ๊ผญ์ง์ ์ ์ขํ๊ฐ ์ฃผ์ด์ง๊ณ ์ด์๋ฐ๋ผ ๊ฐ์ง๋ ๊ฐ์ ๋ฒ์๋ฅผ ๊ตฌํด ์ฌ๊ฐํ์ 1๋ก ์ด๊ธฐํ ์์ผ ์ฃผ์๋ค.
๊ทธ๋ฌ๋ฉด ๋จ์ map์ ์ขํ๋ 0์ด ๋ ๊บผ๊ณ dfs๋ฅผ ๋๋ฉฐ ๋งต์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ dfs_all๋ก ๋์ด์ ธ ์๋ ๊ณณ๋ค์ ๋ํด ๋ฐ๋ณต์ ์ผ๋ก ์ํํ๋ฉด ๋๋ค!
c++ ์ฝ๋ :
//
// 2583_domain.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/02/20.
//
#include <stdio.h>
#include <iostream>
#include <vector>
#include <string.h>
#include <stack>
#include <algorithm>
#define MAX 101
bool map[MAX][MAX];
int cmap[MAX][MAX];
bool visit[MAX][MAX];
int M, N, K;
using namespace std;
int dx[] = { 0, 0, 1, -1 }; //up down left right
int dy[] = { 1, -1, 0, 0 };
int dfs(pair<int, int> start){
int count = 1;
visit[start.first][start.second] = true;
stack<pair<int, int>> s;
s.push(make_pair(start.first, start.second));
while(!s.empty()){//stack s๊ฐ ๋น์ด ์์ง ์์ ๋์
int x = s.top().first;
int y = s.top().second;
// << x << " " << y << endl;
s.pop();
for(int i = 0; i < 4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx >= 0 && ny >= 0 && nx < M && ny < N){
if(visit[nx][ny] == false && cmap[nx][ny] == 0){ // ๋ฐฉ๋ฌธํ์ง ์์๊ณ ๊ฐ ์ ์๋ ๊ธธ์ด๋ผ๋ฉด
visit[nx][ny] = true; // ๋ฐฉ๋ฌธํ ๊ฒ์ ํ๋ณ
count++;
s.push(make_pair(nx, ny));
}
}
}
}
return count;
}
void dfsAll(){
vector<int> ans;
memset(visit, false, sizeof(visit));
pair<int, int> start;
for(int i = 0; i < M; i++){
for(int j = 0; j < N; j++){
if (cmap[i][j] == 0 && visit[i][j] == false){
start = make_pair(i, j);
int cnt = dfs(start);
ans.push_back(cnt);
}
}
}
sort(ans.begin(), ans.end());
cout << (int)ans.size() << endl;
for(int i = 0; i < (int)ans.size(); i++){
cout << ans.at(i) << " ";
}
}
int main(){
int x, y;
cin >> M >> N >> K;
vector<pair<int, int>> temp[K];
for(int i = 0; i < K; i++){
for(int j = 0; j < 2; j++){
cin >> x >> y;
temp[i].push_back(make_pair(M - y, x));
}
}
// for(int i = 0; i < K; i++){
// for(int j = 0; j < (int)temp[i].size(); j++){
// cout << temp[i][j].first << " " << temp[i][j].second << " ";
// }
// cout<< endl;
// }
//map ์ด๊ธฐํ
for(int i =0; i < M + 1; i++){
for(int j = 0; j < N + 1; j++){
map[i][j] = 0;
}
}
for(int i = 0; i < K; i++){ //3
pair<int, int> leftEnd = temp[i][0];
pair<int, int> rightTop = temp[i][1];
int nx = leftEnd.first;
while(nx > rightTop.first){
int ny = leftEnd.second;
while(ny < rightTop.second){
map[nx][ny] = 1;
if (ny < rightTop.second){
ny+= 1;
//cout << nx << " " << ny << endl;
}
}
ny--;
map[nx--][ny]= 1;
}
}
for(int i =1; i < M + 1; i++){
for(int j = 0; j < N; j++){
cout << map[i][j] << " ";
}
cout << endl;
}
for(int i =1; i < M + 1; i++){
for(int j = 0; j < N; j++){
cmap[i-1][j] = map[i][j];
}
}
// for(int i = 0; i < M; i++){
// for(int j = 0; j < N; j++){
// cout << cmap[i][j] <<" " ;
// }
// cout << endl;
// }
dfsAll();
return 0;
}
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1937 ์์ฌ์์ด ํ๋ค ๐ผ DP (0) | 2021.05.02 |
---|---|
[๋ฐฑ์ค] 13460 ๊ตฌ์ฌ ์ฐพ๊ธฐ2 BFS (0) | 2021.04.22 |
[๋ฐฑ์ค] 1697 ์จ๋ฐ๊ผญ์ง BFS (0) | 2021.04.21 |
[๋ฐฑ์ค] 9012 ๊ดํธ string (0) | 2021.04.21 |
[๋ฐฑ์ค] 1110 ๋ํ๊ธฐ ์ฌ์ดํด string (0) | 2021.04.21 |
๋๊ธ