백준 2636 치즈 C++
- C
- 2023. 4. 29.
백준 2636 치즈 C++.
백준 2636번 "치즈" 문제의 자세한 내용은 글 하단의 문제 링크를 참고하세요.
2636번 문제에 주어지는 입력 및 예시
입력:
13 12
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0
0 1 1 1 0 0 0 1 1 0 0 0
0 1 1 1 1 1 1 0 0 0 0 0
0 1 1 1 1 1 0 1 1 0 0 0
0 1 1 1 1 0 0 1 1 0 0 0
0 0 1 1 0 0 0 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
출력:
3
5
코드
백준 2636번 "치즈" 문제의 코드입니다.
#include<bits/stdc++.h>
using namespace std;
int a[100][100], visited[100][100];
int dx[4]={0,1,0,-1};
int dy[4]={-1,0,1,0}; //위오아왼
int n,m;
vector<int> num;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
while(true){
fill(&visited[0][0],&visited[0][0]+100*100,0);
queue<pair<int,int>> q,cheese;
q.push({0,0});
visited[0][0]=1;
while(!q.empty()){
int x,y;
tie(y,x)=q.front();q.pop();
for(int i=0;i<4;i++){
int _dx=x+dx[i];
int _dy=y+dy[i];
if(_dy<0 || _dx<0 || _dy>=n || _dx>=m || visited[_dy][_dx]==1) continue;
if(a[_dy][_dx]==1){
visited[_dy][_dx]=1;
cheese.push({_dy,_dx});
continue;
}
q.push({_dy,_dx});
visited[_dy][_dx]=1;
}
}
if(cheese.empty()) break;
else num.push_back(cheese.size());
while(!cheese.empty()){
int x,y;
tie(y,x)=cheese.front(); cheese.pop();
a[y][x]=0;
}
}
cout<<num.size()<<"\n"<<num[num.size()-1];
return 0;
}
실행
위의 코드를 예제의 입력을 넣어 실행했을 때의 결과입니다.
'C' 카테고리의 다른 글
Vector Slice cpp (0) | 2024.11.19 |
---|---|
백준 14502 연구소 C++ (0) | 2023.04.29 |
백준 4949 균형잡힌 세상 C++ (0) | 2023.04.18 |
백준 9012 괄호 C++ (0) | 2023.04.18 |
백준 2776 암기왕 C++ (0) | 2023.04.17 |