hades

[Baekjoon] 1926๋ฒˆ: ๊ทธ๋ฆผ ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 1926๋ฒˆ: ๊ทธ๋ฆผ

hades1 2024. 7. 1. 14:06

๐Ÿฅ… ๋ฌธ์ œ

https://www.acmicpc.net/problem/1926

 

๐Ÿ” ์„ค๊ณ„

1๋กœ ์ด๋ฃจ์–ด์ง„ ์˜์—ญ์˜ ๊ฐœ์ˆ˜์™€ ๋„“์ด๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค. 1๋กœ ๊ตฌ์„ฑ๋œ ์–ด๋–ค ์นธ์—์„œ ๊ฐ€๋กœ์„ธ๋กœ์— ์ธ์ ‘ํ•œ 1์„ ๊ณ„์†ํ•ด์„œ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•˜๋‚˜์˜ ์˜์—ญ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ, BFS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

๋„ํ™”์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์นธ์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ํ•œ ์นธ์”ฉ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์ˆœํšŒํ•˜๋ฉด์„œ, 1์ด๋ผ๋ฉด ๊ทธ ์นธ์„ ํ•œ ๊ทธ๋ฆผ์„ ์ด๋ฃจ๋Š” ์‹œ์ž‘์ ์œผ๋กœ ํ•˜์—ฌ ํ•œ ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” bfs ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•˜๋Š” visited ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์œผ๋‚˜, ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด 1์ด์—ˆ๋˜ ์นธ์„ ๋ฐฉ๋ฌธํ•˜์˜€์œผ๋ฉด 0์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•˜์˜€๋‹ค. 

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
int n, m, max_area = 0, number_of_painting = 0;
int dx[] = {-1,1,0,0};
int dy[] = {0,0,-1,1};
vector<vector<int>> paper(500, vector<int>(500));

int bfs(int start_x, int start_y){
	int cur_area = 1;
	queue<pair<int, int>> q;
	paper[start_x][start_y] = 0;
	q.push({start_x, start_y});
	while (!q.empty()){
		int cur_x = q.front().first;
		int cur_y = q.front().second;
		q.pop();
		for (int i=0; i<4; i++){
			int new_x = cur_x + dx[i];
			int new_y = cur_y + dy[i];
			if (!(new_x >= 0 && new_x < n && new_y >= 0 && new_y < m)){
				continue;
			}
			if (paper[new_x][new_y] == 1){
				cur_area += 1;
				paper[new_x][new_y] = 0;
				q.push({new_x, new_y});
			}
		}
	}
	return cur_area;
}

int main() {
	cin >> n >> m;
	for (int i=0; i<n; i++){
		for (int j=0; j<m; j++){
			cin >> paper[i][j];
		}
	}
	for (int i=0; i<n; i++){
		for (int j=0; j<m; j++){
			if (paper[i][j]==1){
				max_area = max(max_area, bfs(i, j));
				number_of_painting += 1;
			}
		}
	}
	cout << number_of_painting << "\n" << max_area << "\n";
	return 0;
}

๋„ํ™”์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์นธ์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ํ•œ ์นธ์”ฉ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์ˆœํšŒํ•˜๋ฉด์„œ, 1์ด๋ผ๋ฉด ๊ทธ ์นธ์„ ํ•œ ๊ทธ๋ฆผ์„ ์ด๋ฃจ๋Š” ์‹œ์ž‘์ ์œผ๋กœ ํ•˜์—ฌ ํ•œ ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” bfs ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•˜๋Š” visited ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์œผ๋‚˜, ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด 1์ด์—ˆ๋˜ ์นธ์„ ๋ฐฉ๋ฌธํ•˜์˜€์œผ๋ฉด 0์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•˜์˜€๋‹ค. 

 

๐Ÿ“ ๋ฉ”๋ชจ

bfs ํ•จ์ˆ˜์—์„œ ์ƒˆ๋กœ์šด ์นธ์˜ ๋ฒ”์œ„๋ฅผ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.