문제 설명 및 제한사항
아이디어 및 해결 방법
•
BFS를 활용한 플러드 필 문제입니다.
•
이 문제 채점 시스템 특성 상 bool vis[101][101] = {false} 처럼 명시적으로 값을 초기화해주어야 통과합니다.
코드
#include <vector>
#include <queue>
using namespace std;
int bfs(int r, int c, vector<vector<int>> picture, bool vis[101][101], int R, int C) {
int dr[4] = {1, 0, -1, 0};
int dc[4] = {0, 1, 0, -1};
queue<pair<int, int>> q;
int size = 0;
q.push({r, c});
vis[r][c] = 1;
int color = picture[r][c];
while (!q.empty()) {
pair<int, int> curr = q.front();
q.pop();
size++;
for (int i = 0; i < 4; i++) {
int nr = curr.first + dr[i];
int nc = curr.second + dc[i];
if (nr < 0 || nr >= R || nc < 0 || nc >= C) continue;
if (vis[nr][nc] || picture[nr][nc] != color) continue;
q.push({nr, nc});
vis[nr][nc] = 1;
}
}
return size;
}
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
vector<int> solution(int m, int n, vector<vector<int>> picture) {
int number_of_area = 0;
int max_size_of_one_area = 0;
bool vis[101][101] = {false};
for (int r=0; r < m; r++) {
for (int c=0; c < n; c++) {
if (vis[r][c] || picture[r][c] == 0) continue;
number_of_area++;
int size = bfs(r, c, picture, vis, m, n);
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;
}
C++
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges