11달 전에도 풀었고 6달 전에도 풀었던 문제를 오랜만에 감좀 익힐겸 다시 풀어봤다.
역시 basic했다고 할 수 있다. 뭐 원샷 원킬했다!
BFS오랜만에 해봤는데 예전에 외웠던 코드들이 아직도 기억에 남아있는것같다.
앞으로도 까먹지않게 종종 연습하고 진도를 쭉쭉 나가야겠다.
이거 코드는 보면 바로 이해가 갈 것이다.
#include <iostream>
#include<queue>
struct Que {
int x;
int y;
};
int board[501][501];
bool vis[501][501];
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int a, b;
cin >> a >> b;//가로 세로길이
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
cin >> board[i][j];
}
}
queue<Que> Q;
Que q;
int count = 0;
int max = 0;
int area = 0;
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
if (board[i][j] == 1 && vis[i][j] == false) {
Q.push({ i, j });
vis[i][j] = true;
count++;
}
while (!Q.empty()) {
q = Q.front();
Q.pop();
area++;
for (int k = 0; k < 4; k++) {
if (q.x + dx[k]<0 or q.x + dx[k]>=a or q.y + dy[k]<0 or q.y + dy[k]>=b)continue;
if (board[q.x + dx[k]][q.y + dy[k]] == 1 && vis[q.x + dx[k]][q.y + dy[k]] == false) {
Q.push({q.x + dx[k],q.y + dy[k]});
vis[q.x+dx[k]][q.y+dy[k]] = true;
}
}
}
if (max < area) {
max = area;
}
area = 0;
}
}
cout << count << endl << max;
}
'Development > BOJ' 카테고리의 다른 글
[BOJ] 백준 2636번: 치즈 C++ : 아주정은 (0) | 2020.02.15 |
---|---|
[BOJ] 백준 2544번: 촌수계산 C++ : 아주정은 (0) | 2020.02.13 |
[BOJ] 백준 1260번 : DFS와 BFS C++ : 아주정은 (0) | 2020.02.11 |
[BOJ] 백준 10799번 : 쇠막대기 C++ : 아주정은 (0) | 2020.02.05 |
[BOJ] 백준 5430번 : AC (C++) : 아주정은 (0) | 2020.02.03 |