728x90
728x90
풀이 과정
해당 문제는 bfs로 문제를 해결할려고 결정하였고, 정말 쉽게 풀었다. 하지만 결과는 실패.. 정말 맞왜틀.. 처음에는 내 로직이 틀린 줄 알았다. 그래서 다른 사람 코드를 보고 참고했는데 좀 더 간단하게 구현했을 뿐이지 별 차이가 없는 정말 쉬운 문제였는데,,, 그래서 반환 값 문제인가 해서 long long으로도 바꿔보고 double형으로도 바꿔봤지만 계속 실패만 하였다. 그래서 차근차근 input함수부터 읽어내렸는데,,,
2차원 배열에 RGB 값을 더해서 3으로 나눈 값을 넣는 과정에서 RGB 값을 더하지 않고 RGN을 더해버렸다.;; 하.. 다음부터는 오타가 있는지 먼저 확인을 해야겠다..
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int n,m,t,answer=0;
vector<vector<int>> monitor;
vector<pair<int,int>> v;
int dx[] = {0,-1,0,1};
int dy[] = {1,0,-1,0};
void input(){
ios_base::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin >> n >> m;
monitor.resize(n,vector<int>(m));
for(int i=0; i< n;i++){
for(int j=0,r,g,b; j<m; j++){
cin >> r >> g >> b;
monitor[i][j] = (r+g+b)/3;
}
}
cin >> t;
}
void transform(){
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(monitor[i][j] < t) monitor[i][j] = 0;
else {
monitor[i][j] = 255;
v.push_back({i,j});
}
}
}
}
void objectCount(){
if(v.empty()){
cout << 0;
return;
}
vector<vector<bool>> visited(n,vector<bool>(m));
for(auto vv : v){
if(visited[vv.first][vv.second]) continue;
visited[vv.first][vv.second] = true;
queue<pair<int,int>> q;
q.push({vv.first,vv.second});
while(!q.empty()){
int x = q.front().first;
int y = q.front().second;
q.pop();
for(int i=0; i<4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx <0 or ny < 0 or nx >=n or ny >= m) continue;
if(visited[nx][ny] or !monitor[nx][ny]) continue;
visited[nx][ny] = true;
q.push({nx,ny});
}
}
answer++;
}
cout << answer;
}
void solution(){
input();
transform();
objectCount();
}
int main(){
solution();
return 0;
}
728x90
728x90