이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

코딩테스트

[프로그래머스][C++] 카카오프렌즈 컬러링북

이쿠우우 2022. 3. 20. 11:59
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/1829

 

코딩테스트 연습 - 카카오프렌즈 컬러링북

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>

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;
}



꾸준히 하다보면 실력이 늘겠지..

반응형