티스토리 뷰

Algorithm/BOJ

백준 2583번 C++

poopooreum 2023. 8. 10. 07:55
반응형
백준 2583번 영역 구하기

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

2583번: 영역 구하기

첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오

www.acmicpc.net



정답 코드

#include<iostream>
#include<queue>
#include<algorithm>
#include<vector>
using namespace std;
queue<pair<int, int>>q;
vector<int>v;
int arr[101][101];
bool vis[101][101];
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };
int bfs(int m,int n) {
	int number = 0,area=0;
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			if (arr[i][j] == 1 || vis[i][j])
				continue;
			area = 0;
			q.push({ i,j });
			vis[i][j] = true;
			number++;
			while (!q.empty()) {
				area++;
				pair<int, int>cur = q.front();
				q.pop();
				for (int k = 0; k < 4; k++) {
					int mx = cur.first + dx[k];
					int my = cur.second + dy[k];
					if (mx < 0 || my < 0 || mx >= m || my >= n)
						continue;
					if (arr[mx][my] == 1 || vis[mx][my])
						continue;
					q.push({ mx,my });
					vis[mx][my] = true;
				}			
			}
			v.push_back(area);
		}
	}
	return number;
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int m, n, k;
	cin >> m >> n >> k;
	for (int i = 0; i < k; i++) {
		int x1, y1, x2, y2;
		cin >> x1 >> y1 >> x2 >> y2;
		for (int j = x1; j <x2; j++) {
			for (int k = m-y2; k <m- y1; k++) {
				arr[k][j] = 1;
			}
		}
	}
	int number=bfs(m,n);
	sort(v.begin(), v.end());
	cout << number << endl;
	for (int i = 0; i < v.size(); i++)
		cout << v[i] << " ";
}


문제 풀이

bfs로 풀 수 있는 문제입니다. 코드 구현 과정은 일반적인 bfs문제와 동일합니다. 다만 0,0이 배열 좌측 아래부터 시작하기 때문에 반복문을 돌릴 때 배열 아래쪽부터 돌려야 합니다. 그리고 시작점이 고정이 되어 있는 것이 아니기 때문에 2중 for문을 시작점을 계속 찾아서 탐색을 해야 합니다.

반응형

'Algorithm > BOJ' 카테고리의 다른 글

백준 2588번 C++  (0) 2023.08.10
백준 2587번 C++  (0) 2023.08.10
백준 2581번 C++  (0) 2023.08.09
백준 2577번 C++  (0) 2023.08.09
백준 2566번 C++  (0) 2023.08.09
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함