백준 2583번 영역 구하기
😊 코드 설명
직사각형으로 채워진곳은 map을 전부 1로 할당하고 0을 돌면서 영역을 카운트하였다. 기본적인 문제였지만 주의하여야 할점은 처음 y,x좌표가 반대로 꼬여있기때문에 문제를 정확히보고 중간중간 디버깅을 통하여 map에 문제모양대로 되어있는지 확인하는 습관이 중요하다.
😊 소스 코드
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int n, m, k;
int map[101][101];
bool visit[101][101];
int dy[] = { -1,1,0,0 };
int dx[] = { 0,0,1,-1 };
vector<int> cost; //땅넓이
int costt; //각각 땅 넓이
void dfs(int y, int x) {
costt++;
visit[y][x] = true;
for (int i = 0; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (ny < 0 || ny >= m || nx < 0 || nx >= n) continue;
if(map[ny][nx]==0 && !visit[ny][nx])
dfs(ny, nx);
}
}
int main() {
int x1, x2, y1, y2;
cin >> m >> n >> k;
for (int i = 0; i < k; i++) {
cin >> x1 >> y1 >> x2 >> y2;
for (int y = m - y2; y < m-y1; y++) {
for (int x = x1; x < x2;x++) {
map[y][x] = 1;
}
}
}
int landcnt = 0;
for (int y = 0; y < m; y++) {
for (int x = 0; x < n; x++) {
if (map[y][x] == 0 && !visit[y][x]) {
landcnt++;
costt = 0;
dfs(y, x);
cost.push_back(costt);
}
}
}
sort(cost.begin(), cost.end());
cout << landcnt << endl;
for (int i = 0; i < landcnt; i++) {
cout << cost[i] << " ";
}
return 0;
}
Author And Source
이 문제에 관하여(백준 2583번 영역 구하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@trevor522/백준-2583번-영역-구하기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int n, m, k;
int map[101][101];
bool visit[101][101];
int dy[] = { -1,1,0,0 };
int dx[] = { 0,0,1,-1 };
vector<int> cost; //땅넓이
int costt; //각각 땅 넓이
void dfs(int y, int x) {
costt++;
visit[y][x] = true;
for (int i = 0; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (ny < 0 || ny >= m || nx < 0 || nx >= n) continue;
if(map[ny][nx]==0 && !visit[ny][nx])
dfs(ny, nx);
}
}
int main() {
int x1, x2, y1, y2;
cin >> m >> n >> k;
for (int i = 0; i < k; i++) {
cin >> x1 >> y1 >> x2 >> y2;
for (int y = m - y2; y < m-y1; y++) {
for (int x = x1; x < x2;x++) {
map[y][x] = 1;
}
}
}
int landcnt = 0;
for (int y = 0; y < m; y++) {
for (int x = 0; x < n; x++) {
if (map[y][x] == 0 && !visit[y][x]) {
landcnt++;
costt = 0;
dfs(y, x);
cost.push_back(costt);
}
}
}
sort(cost.begin(), cost.end());
cout << landcnt << endl;
for (int i = 0; i < landcnt; i++) {
cout << cost[i] << " ";
}
return 0;
}
Author And Source
이 문제에 관하여(백준 2583번 영역 구하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@trevor522/백준-2583번-영역-구하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)