반응형
https://programmers.co.kr/learn/courses/30/lessons/1829
글쓴이의 답
개인적인 풀이 임으로
이것보다 더 좋은 알고리즘은 많음...
이렇게도 풀이하는구나.. 공유하기 위해 올림...
#include <vector>
using namespace std;
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int g_M;
int g_N;
int g_Height[4] = {-1, 1, 0, 0}; //위, 아래, 왼쪽, 오른쪽
int g_Width[4] = { 0, 0, -1, 1};
vector <vector<int>> g_Map;
int g_number_of_area;
int g_max_size_of_one_area;
int g_Count = 0;
void dfs(int p_height, int p_width, int number) {
int i = 0;
int hM = 0;
int wM = 0;
if (g_Map[p_height][p_width] != number) {
return;
}
g_Count++;
g_Map[p_height][p_width] = 0;
for (i = 0; i < 4; i++) {
hM = p_height + g_Height[i];
wM = p_width + g_Width[i];
if (hM >= 0 && wM >= 0 && hM < g_M && wM < g_N) {
dfs(hM, wM, number);
}
}
}
vector<int> solution(int m, int n, vector<vector<int>> picture) {
int i = 0;
int k = 0;
int j = 0;
int w = 0;
g_number_of_area = 0;
g_max_size_of_one_area = 0;
g_Map = picture;
g_M = m;
g_N =m;
int number = 0;
for (i = 0; i < m; i++) {
for (k = 0; k < n; k++) {
if (g_Map[i][k] != 0) {
g_Count = 0;
g_number_of_area++;
number = g_Map[i][k];
dfs(i, k, g_Map[i][k]);
if (g_Count > g_max_size_of_one_area) {
g_max_size_of_one_area = g_Count;
}
}
}
}
vector<int> answer(2);
answer[0] = g_number_of_area;
answer[1] = g_max_size_of_one_area;
return answer;
}
꾸준히 하다보면 실력이 늘겠지..
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스][C++] 멀쩡한 사각형 (0) | 2022.03.20 |
---|---|
[프로그래머스][C++] 단체사진 찍기 (0) | 2022.03.20 |
[프로그래머스][C++] 오픈채팅방 (0) | 2022.03.20 |
[프로그래머스][C++] 문자열 압축 (0) | 2022.03.20 |
[프로그래머스][C++] 직사각형 별찍기 (0) | 2022.03.20 |