728x90
https://programmers.co.kr/learn/courses/30/lessons/1829
#include <vector>
#include <queue>
using namespace std;
int bfs(int r, int c, bool visit[100][100],
int m, int n, vector<vector<int>> picture)
{
int value = picture[r][c];
int count = 0;
int dx[] = {-1,1,0,0};
int dy[] = {0,0,-1,1};
queue <pair<int,int>> q;
q.push({r,c});
while (!q.empty())
{
int x = q.front().first;
int y = q.front().second;
q.pop();
if (visit[x][y]) continue;
visit[x][y] = true;
++count;
for (int i=0; i< 4; ++i)
{
int xx = x+dx[i];
int yy = y+dy[i];
if (xx<0 || xx >= m || yy<0 || yy>=n) continue;
if (visit[xx][yy] || picture[xx][yy] != value) continue;
q.push({xx, yy});
}
}
return count;
}
vector<int> solution(int m, int n, vector<vector<int>> picture) {
int number_of_area = 0;
int max_size_of_one_area = 0;
vector<int> answer(2);
answer[0] = number_of_area;
answer[1] = max_size_of_one_area;
bool visit[100][100]={false};
for (int i = 0; i < m; ++i)
{
for (int j = 0; j <n; ++j)
{
if (picture[i][j] && !visit[i][j])
{
++answer[0];
int tmp = bfs(i, j, visit, m, n, picture);
if (answer[1] < tmp)
answer[1] = tmp;
}
}
}
return answer;
}
같은 그림(색깔?) 일때만 BFS가 돌아가게 만들면된다.
다만.. C++이 더 어려웠다.
vector와 queue를 사용하는 방법을 몰라서 한참을 헤맸다.
'STUDY > Algorithm' 카테고리의 다른 글
[프로그래머스] 게임 맵 최단 거리, python (0) | 2021.06.22 |
---|---|
[프로그래머스] 오픈채팅방, 2019 KAKAO BLIND RECRUITMENT, python (0) | 2021.06.21 |
[백준] 2671 잠수함 식별 python (3) | 2021.05.30 |
[백준] 2670 연속부분 최대곱 python (0) | 2021.05.30 |
[백준] 1541 잃어버린 괄호 python (0) | 2021.05.26 |