[2017 카카오코드 예선] 카카오프렌즈 컬러링북
2017 카카오코드 예선 :: 카카오프렌즈 컬러링북
출처 : https://programmers.co.kr/learn/courses/30/lessons/1829#
#include <iostream>
#include <vector>
#include <algorithm>
#include <memory.h>
using namespace std;
int M, N, number_of_area, max_size_of_one_area;
bool visited[100][100];
int dir[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };
vector<vector<int>> v;
inline bool check(int i, int j) { return ((i >= 0 && j >= 0 && i < M && j < N) ? true : false); }
int cal(int i, int j, int c) {
visited[i][j] = true; int n = 1;
for (int d = 0;d < 4; d++) {
int ni = i + dir[d][0]; int nj = j + dir[d][1];
if (check(ni, nj) && !visited[ni][nj] && v[ni][nj] == c) {
n += cal(ni, nj, c);
}
}
return n;
}
vector<int> solution(int m, int n, vector<vector<int>> picture) {
std::ios::sync_with_stdio(false);cin.tie(0);
memset(visited, false, sizeof(visited));
v.clear(); v = picture;
number_of_area = 0; max_size_of_one_area = 0; N = n; M = m;
for (int i = 0; i < M;i++) {
for (int j = 0;j < N; j++) {
if (v[i][j]>0 && !visited[i][j]) {
number_of_area++;
max_size_of_one_area = max(max_size_of_one_area, cal(i, j, v[i][j]));
}
}
}
vector<int> answer(2);
answer[0] = number_of_area;
answer[1] = max_size_of_one_area;
return answer;
}