Dolphins의 HelloWorld
Programmers > 카카오코드 예선 >카카오 프렌즈 컬러링북 본문
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; imax) max = result; } } } vector<int> answer(2); answer[0] = count; answer[1] = max; return answer; }
'Algorithm > Programmers 문제풀이' 카테고리의 다른 글
Programmers > 카카오코드 예선 > 보행자 천국 (0) | 2018.08.18 |
---|---|
Programmers Level 1 이상한 문자 만들기 (0) | 2018.08.18 |
Programmers Level 2 올바른 괄호 (0) | 2018.08.07 |
Programmers Level 2 124나라의 숫자 (0) | 2018.08.06 |
Programmers Level 1 같은 숫자는 싫어 (0) | 2018.08.06 |
Comments