픽셀마다 rgb 값을 읽어서 평균을 낸 뒤 T값을 기준으로 connectivity를 판별해 bfs를 돌리면 된다.
뭔가 귀찮음!
#include <bits/stdc++.h>
#define fastio ios::sync_with_stdio(0), cin.tie(0)
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define all(v) v.begin(), v.end()
int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int arr[1005][1005];
bool visited[1005][1005];
int n, m, T;
void input() {
cin >> n >> m;
for(int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j) {
int sum = 0;
for(int k = 0; k < 3; ++k) {
int num; cin >> num;
sum += num;
}
arr[i][j] = sum / 3;
}
}
cin >> T;
}
void b(int x, int y) {
queue<pii> q;
visited[x][y] = true;
q.push({x, y});
while(!q.empty()) {
auto [fx, fy] = q.front(); q.pop();
for(int i = 0; i < 4; ++i) {
int nx = fx + dx[i], ny = fy + dy[i];
if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
if(visited[nx][ny] || arr[nx][ny] < T) continue;
visited[nx][ny] = true;
q.push({nx, ny});
}
}
}
int main() {
fastio;
input();
int ans = 0;
for(int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j) {
if(visited[i][j] || arr[i][j] < T) continue;
b(i, j);
ans++;
}
}
cout << ans;
return 0;
}
백준 21940 가운데에서 만나기 (0) | 2022.03.22 |
---|---|
백준 21937 작업 혼내주기 (0) | 2022.03.22 |
백준 21939 문제 추천 시스템 Version 1 혼내주기 (0) | 2022.03.15 |
백준 21924 도시 건설 혼내주기 (0) | 2022.03.03 |
백준 21923 곡예 비행 혼내주기 (0) | 2022.03.03 |
댓글 영역