Study Record

[프로그래머스] Level2 - 카카오프렌즈 컬러링북 본문

알고리즘

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

초코초코초코 2021. 12. 2. 17:48
728x90
#include <vector>
#include <stack>
using namespace std;

vector<int> solution(int m, int n, vector<vector<int>> picture) {
    int number_of_area = 0;
    int max_size_of_one_area = 0;
    for (int i = 0; i < m; i++) {
        for (int k = 0; k < n; k++) {
            // 0 이면 패스
            if (picture[i][k] == 0) continue;
            else {
                number_of_area++;
                int size_of_area = 1;
                int area_value = picture[i][k];
                picture[i][k] = 0;
                stack<pair<int, int>> area;
                area.push(make_pair(i, k));
                do {
                    int now_i = area.top().first;
                    int now_k = area.top().second;
                    area.pop();
                    // 상하좌우 탐색
                    if (now_i - 1 >= 0 && picture[now_i - 1][now_k] == area_value) {
                        // 위
                        area.push(make_pair(now_i - 1, now_k));
                        picture[now_i - 1][now_k] = 0;
                        size_of_area++;
                    }
                    if (now_i + 1 < m && picture[now_i + 1][now_k] == area_value) {
                        // 아래
                        area.push(make_pair(now_i + 1, now_k));
                        picture[now_i + 1][now_k] = 0;
                        size_of_area++;
                    }
                    if (now_k - 1 >= 0 && picture[now_i][now_k - 1] == area_value) {
                        // 왼쪽
                        area.push(make_pair(now_i, now_k - 1));
                        picture[now_i][now_k - 1] = 0;
                        size_of_area++;
                    }
                    if (now_k + 1 < n && picture[now_i][now_k + 1] == area_value) {
                        // 오른쪽
                        area.push(make_pair(now_i, now_k + 1));
                        picture[now_i][now_k + 1] = 0;
                        size_of_area++;
                    }
                } while (!area.empty());
                if (size_of_area > max_size_of_one_area) max_size_of_one_area = size_of_area;
            }
        }
    }

    vector<int> answer(2);
    answer[0] = number_of_area;
    answer[1] = max_size_of_one_area;
    return answer;
}

 

 

 

728x90