-
Programmers [2017 카카오코드 예선]: 카카오프렌즈 컬러링북Problem Solving/Programmers 2020. 12. 31. 00:34
programmers.co.kr/learn/courses/30/lessons/1829#
배열 내의 Connected Component의 개수를 구한 뒤, 가장 원소를 많이 가진 연결요소의 원소 수를 구하면 된다!!
#include <vector> #include <queue> using namespace std; int N,M,dx[] = { 1,0,-1,0 }, dy[] = { 0,1,0,-1 }; bool visit[101][101]; typedef struct { int x, y; }point; bool safe(int x, int y) { return x >= 0 && x < M && y >= 0 && y < N; } // 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요. vector<int> solution(int n, int m, vector<vector<int>> picture) { int number_of_area = 0; int max_size_of_one_area = 0; int arr[101][101]; for(int i=0;i<n;i++)for(int j=0;j<m;j++){ arr[i][j]=picture[i][j]; visit[i][j]=false; } N = n; M = m; for (int i = 0; i < n; i++)for (int j = 0; j < m; j++) { if (visit[i][j] || !arr[i][j])continue; number_of_area++; int color = arr[i][j],size=0; queue<point> q; q.push({ j,i }); visit[i][j] = 1; while(!q.empty()) { size++; point cur = q.front(); q.pop(); for (int k = 0; k < 4; k++) { int nx = cur.x + dx[k], ny = cur.y + dy[k]; if (!safe(nx, ny) || visit[ny][nx] || arr[ny][nx] != color)continue; q.push({ nx,ny }); visit[ny][nx] = 1; } } if (size > max_size_of_one_area) max_size_of_one_area = size; } vector<int> answer(2); answer[0] = number_of_area; answer[1] = max_size_of_one_area; return answer; }
참 쉽죠?
'Problem Solving > Programmers' 카테고리의 다른 글
Programmers [2019 카카오 개발자 겨울 인턴십]: 튜플 (0) 2021.01.02 Programmers [2018 KAKAO BLIND RECRUITMENT]: [1차] 비밀지도 (0) 2021.01.02 Programmers [Summer/Winter Coding(~2018)]: 스킬트리(Python) (0) 2020.11.15 Programmers [탐욕법 Greedy] : 큰 수 만들기 풀이 및 코드 (0) 2020.10.01 Programmers [2020 카카오 인턴십] : 수식 최대화 풀이 및 코드 (0) 2020.08.31