๋ฌธ์
์ฝ๋
#include <iostream>
#include <queue>
#include <memory.h>
using namespace std;
int N,L,R, day;
int map[51][51];
int line[51][51];
bool visited[51][51];
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
bool line_check(){
bool flag = false;
for(int i=0; i<N; i++){ // ๊ฐ๋ก ํ์ธ
for(int k=0; k<N-1; k++){
int diff = abs(map[i][k] - map[i][k+1]);
if(diff>=L && diff<=R){ // ์ธ๊ตฌ ์ฐจ์ด๊ฐ L๋ช
์ด์, R๋ช
์ดํ์ผ ๋
flag = true;
line[i][k] = 1;
line[i][k+1] = 1;
}
}
}
for(int k=0; k<N; k++){ // ์ธ๋ก ํ์ธ
for(int i=0; i<N-1; i++){
int diff = abs(map[i][k] - map[i+1][k]);
if(diff>=L && diff<=R){ // ์ธ๊ตฌ ์ฐจ์ด๊ฐ L๋ช
์ด์, R๋ช
์ดํ์ผ ๋
flag = true;
line[i][k] = 1;
line[i+1][k] = 1;
}
}
}
return flag;
}
void search_union(int x, int y){ // ์ฐํฉ ํ์
int peo_sum = map[x][y];
int blank_cnt = 1;
visited[x][y] = 1;
queue<pair<int,int>> q;
vector<pair<int,int>> coor = {{x, y}};
q.push({x,y});
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 && nx<N && ny>=0 && ny<N){
int diff = abs(map[x][y] - map[nx][ny]);
if(!visited[nx][ny] && diff>=L && diff<=R){
visited[nx][ny] = 1;
q.push({nx, ny});
blank_cnt++;
peo_sum += map[nx][ny];
coor.push_back({nx, ny});
}
}
}
}
int population = peo_sum / blank_cnt; // ๊ฐ ์นธ์ ์ด๋ฃฐ ์๋ก์ด ์ธ๊ตฌ ์
for(auto it: coor) map[it.first][it.second] = population; //์ธ๊ตฌ ์ด๋
}
void move(){
for(int i=0; i<N; i++){
for(int k=0; k<N; k++){
if(line[i][k] && !visited[i][k]) search_union(i, k);
}
}
}
void simulation(){
while(line_check()){
move();
day++;
memset(visited, 0 ,sizeof(visited));
memset(line, 0, sizeof(line));
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>L>>R;
for(int i=0; i<N; i++){
for(int k=0; k<N; k++){
cin>>map[i][k];
}
}
simulation();
cout<<day;
}
ํ์ด
์์ ๊ฐ์ ์ด๊ธฐ์ ๊ฐ ๋๋ผ์ ์ธ๊ตฌ์๊ฐ ์ฃผ์ด์ก์ ๋ ๊ฐ ์ธ์ ํ ๋๋ผ์ ์ธ๊ตฌ์ ์ฐจ์ด๊ฐ L ์ด์ R์ดํ์ผ ๋ ์๋์ ๊ฐ์ด ๊ตญ๊ฒฝ์ ์ ์คํํ ์ ์์ต๋๋ค.
์คํ๋ ๊ฐ ๋๋ผ์ ํ ๋ญํ ์ด๋ฅผ ์ฐํฉ์ด๋ผ๊ณ ์นญํ๋ฉฐ, ์ฐํฉ์ ์ฌ๋ฌ ๊ฐ๊ฐ ์์ฑ๋ ์ ์์ต๋๋ค.
๊ฐ ์ฐํฉ์ ๋๋ผ์ ์ธ๊ตฌ์๋ (์ฐํฉ์ ์ธ๊ตฌ์) / (์ฐํฉ์ ์ด๋ฃจ๊ณ ์๋ ์นธ์ ๊ฐ์) ๋ก ์ธ๊ตฌ์ด๋์ด ์ฆ, ์ธ๊ตฌ๋ฅผ ๋ณ๊ฒฝ์ํต๋๋ค.
- ๋จผ์ ์ฐํฉ์ ์๊ด์์ด ๊ฐ ์ธ์ ํ ๋๋ผ์ ์ธ๊ตฌ์ ์ฐจ์ด๊ฐ L ์ด์ R์ดํ์ธ ๋ชจ๋ ๋๋ผ๋ค์ ์ฒดํฌ ๋ฐฐ์ด์ ํตํด ๊ธฐ๋กํ์ต๋๋ค.
- ๋ค์์ ์ฒดํฌ ๋ฐฐ์ด์ ๊ธฐ๋ก๋ ๋๋ผ๋ฅผ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฌ๊ณ , ๊ทธ ์์์ bfs๋ฅผ ๋๋ ค์ ์ฐํฉ์ ์ธ๊ตฌ์๋ฅผ ๊ฐฑ์ ํ์ต๋๋ค.
- bfs์์ ์ํ์ข์ฐ ํ์์ ํ๋ฉฐ ์ธ๊ตฌ์ ์ฐจ์ด๊ฐ L ์ด์ R์ดํ์ธ ๋๋ผ๋ง ์ฐพ์์ ์ธ๊ตฌ์๋ฅผ ๊ฐฑ์ ํ๊ธฐ์, ์ฒ์ bfs๋ฅผ ๋๋ฆด ๋์ ๋๋ผ๊ฐ ์ํ ์ฐํฉ ์ธ๊ตฌ์๋ฅผ ๊ฐฑ์ ํ ์ ์์ต๋๋ค.
- ํ๋ฃจ๋ฅผ ์ง๋๊ฐ๊ธฐ์ ์ผ์๋ฅผ +1 ํด์ค๋๋ค.
- ์ฐํฉ์ ํด์ ํ๊ณ , ๋ชจ๋ ๊ตญ๊ฒฝ์ ์ ๋ซ์ต๋๋ค.
- ์ 1~5 ๊ณผ์ ์ ์ฐํฉ์ด ์๊ธธ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 11438๋ฒ - LCA 2 (0) | 2022.08.30 |
---|---|
[๋ฐฑ์ค,c++] 16236๋ฒ - ์๊ธฐ ์์ด (0) | 2022.08.28 |
[๋ฐฑ์ค,c++] 15686๋ฒ - ์นํจ ๋ฐฐ๋ฌ (0) | 2022.08.26 |
[๋ฐฑ์ค,c++] 17135๋ฒ - ์บ์ฌ๋ํ์ค (2) | 2022.08.25 |
[๋ฐฑ์ค,c++] 14503๋ฒ - ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2022.08.24 |
[๋ฐฑ์ค,c++] 20955๋ฒ - ๋ฏผ์์ ์๊ธ ์์ (0) | 2022.08.23 |
๋๊ธ