๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DFS,BFS

[softeer] ์žฅ์• ๋ฌผ ์ธ์‹ ํ”„๋กœ๊ทธ๋žจ

by syLim___ 2023. 5. 16.
728x90

https://softeer.ai/practice/info.do?idx=1&eid=409&sw_prbl_sbms_sn=203120 

 

Softeer

์—ฐ์Šต๋ฌธ์ œ๋ฅผ ๋‹ด์„ Set์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. ์ทจ์†Œ ํ™•์ธ

softeer.ai


์ „ํ˜•์ ์ธ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ๋‹ค.

dfs, bfs ๋ฌธ์ œ๋ฅผ ์•ˆ ํ‘ผ ์ง€ ๋„˜ ์˜ค๋ž˜๋์–ด์„œ ์•ฝ๊ฐ„ ๋ฒ„๋ฒ…๊ฑฐ๋ ธ๋‹ค.

 

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;

int block[25][25];
int visited[25][25] = {0,};
int n; int c;

int dfs(int x, int y){
	if (x >= 0 && x < n && y >= 0 && y < n){
		if (visited[x][y] == 0 && block[x][y]==1){
			visited[x][y] = 1; c++;
			dfs(x-1,y);
			dfs(x,y-1);
			dfs(x+1,y);
			dfs(x,y+1);
			return c;
		}
	}
	return -1;
}

int main(int argc, char** argv)
{
	cin >> n;
	for(int i=0; i<n; i++){
		for(int j=0; j<n; j++){
			scanf("%1d", &block[i][j]);
		}
	}
	int cnt = 0, result;
	vector<int> v;
	for(int i=0; i<n; i++){
		for(int j=0; j<n; j++){
			c = 0; result = dfs(i,j);
			if (result > 0) {
				cnt++;
				v.push_back(result);
			}
		}
	}

	//๊ฒฐ๊ณผ ์ถœ๋ ฅ
	cout<<cnt<<"\n";
	sort(v.begin(), v.end());
	for(int i=0; i<cnt; i++){
		cout<<v[i]<<"\n";
	}

	return 0;
}

 

์˜ˆ์ „์— ๋ฐฑ์ค€์— ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋˜ ๊ฒƒ ๊ฐ™์•„์„œ ์˜ˆ์ „ ๊ธฐ๋ก์„ ๋‹ค์‹œ ์ฐพ์•„๋ดค๋Š”๋ฐ, ๊ทธ๋•Œ๋Š” bfs๋กœ ํ’€์—ˆ์—ˆ๋‹น

728x90