Today I learned : BFS 1문제 풀이..
오늘 할 일
파일 취합해서 조원들한테 컨펌 받기- 근무시간에 바킹독 문제집 큐~BFS 뽀개기 -> 시간 없어서 못함..
오늘은 ㄹㅇ 경험기술 정리하고 세미나 지원- BFS 마무리
1926 : 그림
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int board[501][501];
bool vis[501][501];
int dx[4]={-1,0,1,0};
int dy[4]={0,-1,0,1};
int main(void){
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
cin>>board[i][j];
}
int max_paint=0;
queue<int> paint;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(board[i][j]==0 || vis[i][j]==1) continue;
vis[i][j]=1;
queue<pair<int,int>> Q;
Q.push({i,j});
int vis_sum=1;
while(!Q.empty()){
pair<int,int> cur=Q.front(); Q.pop();
for(int dir=0;dir<4;dir++){
int nx=cur.X+dx[dir];
int ny=cur.Y+dy[dir];
if(nx<0 || nx >(n-1) || ny<0 || ny > m-1) continue;
if(board[nx][ny]==0) continue;
if(vis[nx][ny]==1) continue;
vis[nx][ny]=1;
Q.push({nx,ny});
vis_sum++;
}
}
paint.push(vis_sum);
if(max_paint<vis_sum) max_paint=vis_sum;
}
}
cout<<paint.size()<<'\n'<<max_paint;
}
나 혼자서 풀지는 못하고 BFS 예제 보면서 응용해 풀었다.. 코드 작성에 익숙해져야 할듯.. 이따가 집 가서 기본 코드 한 번 더 복습하기.
회고
오늘은 간만에 점검 업무 했다. 너무 간만에 해서 버벅거렸지만 퇴근 전에 끝내서 전달드렸다 ㅎㅎ 옆부서 과장님이 알려주신 한글의 스타일 서식 복붙 정말 요긴하게 써서 파일 취합했다. alt+CBD / alt+C.. 퇴행하고 가장 기억에 남을 단축키이다. 사실 엑셀의 중복 항목 제거 단축키도 많이 썼는데 이건 생각이 잘 안 나네 ㅎ ctrl+shift+M이었나? 뭐 눌러보면 알것지..
근데 BFS 늪에서 빠져나와야 하는데 영원히 한 문제씩 산 넘어 산이다… 며칠을 붙잡고 있는건지 일단 바킹독은 빠르게 나가고 빠르게 체화하는 방법 먼저 한 후에 고민하는 시간을 가져야 할 거 같다. 이대로라면 영원히 완강을 못해………