๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Programmers)

[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์นด์นด์˜ค ํ”„๋ Œ์ฆˆ ์ปฌ๋Ÿฌ๋ง๋ถ( Level 2, 2017 ์นด์นด์˜ค ์ฝ”๋“œ ์˜ˆ์„ )

by ์•ˆ์ฃผํ˜• 2021. 10. 23.

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์นด์นด์˜คํ”„๋ Œ์ฆˆ ์ปฌ๋Ÿฌ๋ง๋ถ

6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5]

programmers.co.kr

 

์ฝ”๋“œ

#include <vector>
#include <queue>

using namespace std;

int cnt=0;
const int dx[4]={0,0,-1,1};
const int dy[4]={-1,1,0,0};

void bfs(int x,int y,int m,int n,vector<vector<int>> picture,int number_of_area,int visited[101][101]){
    queue<pair<int,int>>q;
    q.push({x,y});
    visited[x][y]=1;
    
    while(!q.empty()){
        cnt++;
        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<m&&ny>=0&&ny<n){
                if(!visited[nx][ny]&&picture[nx][ny]==picture[x][y]){
                    visited[nx][ny]=1;
                    q.push({nx,ny});
                }
            }
        }
    }
}
// ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ๊ฒฝ์šฐ ํ•จ์ˆ˜ ๋‚ด์— ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ๊ผญ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
vector<int> solution(int m, int n, vector<vector<int>> picture) {
    int number_of_area=0, max_size_of_one_area=0;
    int visited[101][101]={0,};
    
    for(int i=0; i<m; i++){
        for(int k=0; k<n; k++){
            if(!visited[i][k]&&picture[i][k]!=0){
                number_of_area++;
                bfs(i,k,m,n,picture,number_of_area,visited);
                max_size_of_one_area=max(max_size_of_one_area,cnt);
                cnt=0;
            }
        }
    }
    
    vector<int> answer(2);
    answer[0] = number_of_area;
    answer[1] = max_size_of_one_area;
    return answer;
}

๋Œ“๊ธ€