반응형
문제출처
https://programmers.co.kr/learn/courses/30/lessons/1829
문제풀이
삼성 역량테스트를 준비할때 많이 풀어본 유형이다. 기본적인 BFS문제로 완전탐색을 했다. BFS탐색을 할때마다 영역의 개수가 1개씩 증가하고 각 영역의 크기를 구하면 되는 문제다.
소스코드
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
const int dy[] = { 0, -1, 0, 1 };
const int dx[] = { 1, 0, -1, 0 };
bool visit[100][100] = { 0, };
int bfs(int sy, int sx, int m, int n, vector<vector<int>> picture) {
int color = picture[sy][sx];
int size = 1;
queue<pair<int, int> > q;
q.push(make_pair(sy, sx));
visit[sy][sx] = 1;
while (!q.empty()) {
int y = q.front().first;
int x = q.front().second;
q.pop();
for (int i=0; i<4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (ny<0 || nx<0 || ny>=m || nx>=n || visit[ny][nx] || picture[ny][nx] != color) continue;
visit[ny][nx] = 1;
q.push(make_pair(ny, nx));
size++;
}
}
return size;
}
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
vector<int> solution(int m, int n, vector<vector<int>> picture) {
for (int y=0; y<m; y++) {
for (int x=0; x<n; x++) {
visit[y][x] = 0;
}
}
int areaCount = 0;
int maxAreaCount = 0;
for (int y=0; y<m; y++) {
for (int x=0; x<n; x++) {
if (visit[y][x] || picture[y][x] == 0) continue;
maxAreaCount = max(maxAreaCount, bfs(y, x, m, n, picture));
areaCount++;
}
}
vector<int> answer(2);
answer[0] = areaCount;
answer[1] = maxAreaCount;
return answer;
}
반응형
'Algorithm' 카테고리의 다른 글
[BOJ 1062] 가르침 (0) | 2020.06.08 |
---|---|
[프로그래머스 49994] - 방문 길이 (0) | 2020.06.03 |
[프로그래머스 64064] - 카카오 불량 사용자 (0) | 2020.06.02 |
[프로그래머스 64062] - 카카오 징검다리 건너기 (2) | 2020.06.02 |
[프로그래머스 43238] - 입국심사 (0) | 2020.06.02 |