백준 14502 연구소 C++
- C
- 2023. 4. 29.
백준 14502번 연구소 C++.
백준 14502번 "연구소" 문제의 자세한 내용은 글 하단의 문제 링크를 참고하세요.
14502번 문제에 주어지는 입력 및 예시
입력:
7 7
2 0 0 0 1 1 0
0 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 0 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0
출력:
27
코드
백준 14502번 "연구소" 문제의 코드입니다.
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>> virus,wall;
int n,m,result,tmp;
int a[8][8],visited[8][8];
int dx[4]={0, 1, 0, -1};
int dy[4]={-1, 0, 1, 0}; //위오아왼
void dfs(int y,int x){
visited[y][x]=1;
for(int i=0;i<4;i++){
int _dx=dx[i]+x;
int _dy=dy[i]+y;
if(_dy<0 || _dx<0 || _dy>=n || _dx>= m ) continue;
if( visited[_dy][_dx]==1 || a[_dy][_dx]==1 ) continue;
dfs(_dy,_dx);
}
return;
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
cin>>a[i][j];
if(a[i][j]==0) wall.push_back({i,j});
if(a[i][j]==2) virus.push_back({i,j});
}
for(int i=0;i<wall.size();i++){
for(int j=0;j<i;j++){
for(int k=0;k<j;k++){
fill(&visited[0][0],&visited[0][0]+8*8,0);
tmp=0;
a[wall[i].first][wall[i].second]=1;
a[wall[j].first][wall[j].second]=1;
a[wall[k].first][wall[k].second]=1;
for(pair<int,int>v:virus)
dfs(v.first,v.second);
for(int ii=0;ii<n;ii++)
for(int jj=0;jj<m;jj++)
if(a[ii][jj]==0&&visited[ii][jj]==0) tmp++;
result=result>tmp?result:tmp;
a[wall[i].first][wall[i].second]=0;
a[wall[j].first][wall[j].second]=0;
a[wall[k].first][wall[k].second]=0;
}
}
}
cout<<result;
return 0;
}
실행
위의 코드를 예제의 입력을 넣어 실행했을 때의 결과입니다.
'C' 카테고리의 다른 글
백준 2636 치즈 C++ (1) | 2023.04.29 |
---|---|
백준 4949 균형잡힌 세상 C++ (0) | 2023.04.18 |
백준 9012 괄호 C++ (0) | 2023.04.18 |
백준 2776 암기왕 C++ (0) | 2023.04.17 |
백준 10773 제로 C++ (0) | 2023.04.17 |