게으른카르

백준 2636 치즈 C++

C
2023. 4. 29. 02:25

백준 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' 카테고리의 다른 글

백준 14502 연구소 C++  (0) 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

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band