본문 바로가기

알고리즘/BOJ

[백준] 2583번 영역 구하기

[풀이]

쉬운 문제인데 처음에 좀 헷갈렸습니다..  저 색칠된 부분이 좌표라고 생각했는데 그게 아니어서 당황했던거죠..ㅠ 

그렇지만 주어진 좌표를 토대로 제 입맛에 맞게 (위 그림처럼) 새로운 2D array를 만들고 해결하면 간단하게 풀리는 문제였습니다!

새로운 배열로 비어있는 부분을 BFS 탐색하였습니다.

 

아래는 풀이한 코드입니다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <queue>
#include <algorithm>
#include <vector>
using namespace std;
int xpos[] = { 01-10 };
int ypos[] = { 100-1 };
int map[100][100];
 
int bfs(int x, int y, int m, int n) {
    queue<pair<intint>> q;
    map[x][y] = 1;
    q.push({ x,y });
    int area = 1;
    while (!q.empty()) {
        pair<intint> pos = q.front();
        q.pop();
        for (int i = 0; i < sizeof(xpos) / sizeof(int); i++) {
            int next_x = pos.first + xpos[i];
            int next_y = pos.second + ypos[i];
            if (next_x >= 0 && next_x < m && next_y >= 0 && next_y < n) {
                if (!map[next_x][next_y]) {
                    area++;
                    map[next_x][next_y] = 1;
                    q.push({ next_x,next_y });
                }
            }
        }
    }
    return area;
}
int main(void) {
    int m, n, k;
    cin >> m >> n >> k;
    for (int i = 0; i < k; i++) {
        int y1, x1, y2, x2;
        cin >> y1 >> x1 >> y2 >> x2;
        // 직사각형 입력
        if (x1 > x2) swap(x1, x2);
        if (y1 > y2) swap(y1, y2);
        // x, y를 큰 숫자 쪽에서 1씩 빼주면 
        // 그림과 같은 2D array를 만들수 있다.
        for (int i = x1; i <= x2-1; i++) {
            for (int j = y1; j <= y2-1; j++) {
                map[i][j] = 1;
            }
        }
    }
    vector<int> result;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (!map[i][j]) 
                result.push_back(bfs(i, j, m, n));
        }
    }
    sort(result.begin(), result.end());
    cout << result.size() << endl;
    for (auto x : result) cout << x << ' ';
 
    return 0;
}
cs

질문이나 지적사항은 댓글로 부탁드립니다 :) 

'알고리즘 > BOJ' 카테고리의 다른 글

[백준] 1707번 이분 그래프  (0) 2019.09.17
[백준] 13460번 구슬 탈출 2  (0) 2019.09.15
[백준] 14502번 연구소  (0) 2019.09.11
[백준] 1260번 DFS와 BFS  (0) 2019.09.07
[백준] 2816번 디지털 티비  (0) 2019.08.27