[Baekjoon] 백준 1926번 그림
문제: https://www.acmicpc.net/problem/1926
내코드
- BFS를 이용하는 문제
- 코드짜고 바로 통과할만큼 간단한 문제였다.
- 아래 파일은 아이패드 노타빌리티에 정리한 내용
#include <iostream>
#include <string>
#include <queue>
#include <utility>
using namespace std;
int n, m;
int** arr;
bool** visited;
int num = 0, maxNum = 0;
queue<pair<int, int>> qu;
void isNear(int p, int q) {
if (p < 0 || q < 0 || p >= n || q >= m) return;
if (arr[p][q] == 1 && visited[p][q] == false) {
qu.push(make_pair(p, q));
visited[p][q] = true;
}
}
void findArea() {
int area = 0;
while (!qu.empty()) {
pair<int, int> cur = qu.front();
qu.pop();
area++;
int p = cur.first;
int q = cur.second;
isNear(p, q - 1);
isNear(p - 1, q);
isNear(p, q + 1);
isNear(p + 1, q);
}
if (maxNum < area) {
maxNum = area;
}
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
arr = new int*[n];
for (int i = 0; i < n; i++) {
arr[i] = new int[m];
}
visited = new bool*[n];
for (int i = 0; i < n; i++) {
visited[i] = new bool[m];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> arr[i][j];
visited[i][j] = false;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] == 1 && visited[i][j] == false) {
qu.push(make_pair(i, j));
visited[i][j] = true;
num++;
findArea();
}
}
}
cout << num << "\n" << maxNum;
return 0;
}
참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 1697번 숨바꼭질 (0) | 2020.02.28 |
---|---|
[BaekJoon] 백준 2178번 미로탐색 (0) | 2020.02.25 |
[BaekJoon]백준 2493번 탑 (0) | 2020.01.28 |
[Baekjoon]백준 2504번 괄호의 값 (0) | 2020.01.23 |
[BaekJoon] 백준 10799번 쇠막대기 (0) | 2019.12.12 |