Dolphins의 HelloWorld

Programmers > 카카오코드 예선 >카카오 프렌즈 컬러링북 본문

Algorithm/Programmers 문제풀이

Programmers > 카카오코드 예선 >카카오 프렌즈 컬러링북

돌핀's 2018. 8. 17. 16:53


BFS를 이용해서 풀면 어렵지않게 풀 수 있는 문제이다.


컬러링 북을 탐색할 때 0이 아닌 부분(어떤 색깔로 색칠이 되어있는 부분)을 만나면


그 좌표를 중심으로 BFS를 통해 색깔이 같은 모든 부분을 탐색하였고


탐색하면서 탐색한 좌표를 모두 count하였으며 탐색이 완료된 것은 0으로 만들어주어


다시 탐색되지 않게 하였다.


#include <vector>
#include <queue>

using namespace std;
int a,b;
int number_of_area = 0;
int max_size_of_one_area = 0;
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};

vector<vector<int>> picture2;

int BFS(int x,int y,int num){
    queue<pair<int,int>> q;
    int result = 1;
    picture2[x][y] = 0;
    q.push(make_pair(x,y));
    while(!q.empty())
    {
        x = q.front().first;
        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=0 && ny < b){
                if(picture2[nx][ny] == num){
                    picture2[nx][ny] = 0;
                    result++;
                    q.push(make_pair(nx,ny));
                }
            }
        }
    }
    return result;
}
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
vector<int> solution(int m, int n, vector<vector<int>> picture) {
    picture2 = picture;
    a = m, b = n; //주어진 변수를 전역변수로 사용하기 위한 장치
    int max = 0; //가장 많이 색깔이 칠해진 영역의 갯수
    int count = 0; //색깔의 종류
    for(int i=0; i max) max = result;
            }
        }
    }
    
    vector<int> answer(2);
    answer[0] = count;
    answer[1] = max;
    
    return answer;
}
Comments