๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 16234๋ฒˆ - ์ธ๊ตฌ ์ด๋™

by ์•ˆ์ฃผํ˜• 2022. 8. 25.

๋ฌธ์ œ

 

16234๋ฒˆ: ์ธ๊ตฌ ์ด๋™

N×Nํฌ๊ธฐ์˜ ๋•…์ด ์žˆ๊ณ , ๋•…์€ 1×1๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋•…์—๋Š” ๋‚˜๋ผ๊ฐ€ ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๋ฉฐ, rํ–‰ c์—ด์— ์žˆ๋Š” ๋‚˜๋ผ์—๋Š” A[r][c]๋ช…์ด ์‚ด๊ณ  ์žˆ๋‹ค. ์ธ์ ‘ํ•œ ๋‚˜๋ผ ์‚ฌ์ด์—๋Š” ๊ตญ๊ฒฝ์„ ์ด ์กด์žฌํ•œ๋‹ค. ๋ชจ

www.acmicpc.net

 

์ฝ”๋“œ

#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์ดํ•˜์ผ ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตญ๊ฒฝ์„ ์„ ์˜คํ”ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตญ๊ฒฝ์„ ์„ ํ•ด์ œ

์˜คํ”ˆ๋œ ๊ฐ ๋‚˜๋ผ์˜ ํ•œ ๋ญ‰ํ……์ด๋ฅผ ์—ฐํ•ฉ์ด๋ผ๊ณ  ์นญํ•˜๋ฉฐ, ์—ฐํ•ฉ์€ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์—ฐํ•ฉ์˜ ๋‚˜๋ผ์˜ ์ธ๊ตฌ์ˆ˜๋Š” (์—ฐํ•ฉ์˜ ์ธ๊ตฌ์ˆ˜) / (์—ฐํ•ฉ์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ์นธ์˜ ๊ฐœ์ˆ˜) ๋กœ ์ธ๊ตฌ์ด๋™์ด ์ฆ‰, ์ธ๊ตฌ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ต๋‹ˆ๋‹ค.

  1. ๋จผ์ € ์—ฐํ•ฉ์— ์ƒ๊ด€์—†์ด ๊ฐ ์ธ์ ‘ํ•œ ๋‚˜๋ผ์˜ ์ธ๊ตฌ์ˆ˜ ์ฐจ์ด๊ฐ€ L ์ด์ƒ R์ดํ•˜์ธ ๋ชจ๋“  ๋‚˜๋ผ๋“ค์„ ์ฒดํฌ ๋ฐฐ์—ด์„ ํ†ตํ•ด ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ๋‹ค์Œ์— ์ฒดํฌ ๋ฐฐ์—ด์— ๊ธฐ๋ก๋œ ๋‚˜๋ผ๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๊ณ , ๊ทธ ์•ˆ์—์„œ bfs๋ฅผ ๋Œ๋ ค์„œ ์—ฐํ•ฉ์˜ ์ธ๊ตฌ์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. bfs์—์„œ ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰์„ ํ•˜๋ฉฐ ์ธ๊ตฌ์ˆ˜ ์ฐจ์ด๊ฐ€ L ์ด์ƒ R์ดํ•˜์ธ ๋‚˜๋ผ๋งŒ ์ฐพ์•„์„œ ์ธ๊ตฌ์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•˜๊ธฐ์—, ์ฒ˜์Œ bfs๋ฅผ ๋Œ๋ฆด ๋•Œ์˜ ๋‚˜๋ผ๊ฐ€ ์†ํ•œ ์—ฐํ•ฉ ์ธ๊ตฌ์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ํ•˜๋ฃจ๋ฅผ ์ง€๋‚˜๊ฐ€๊ธฐ์— ์ผ์ˆ˜๋ฅผ +1 ํ•ด์ค๋‹ˆ๋‹ค.
  5. ์—ฐํ•ฉ์„ ํ•ด์ œํ•˜๊ณ , ๋ชจ๋“  ๊ตญ๊ฒฝ์„ ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.
  6. ์œ„ 1~5 ๊ณผ์ •์„ ์—ฐํ•ฉ์ด ์ƒ๊ธธ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€