• toc {:toc}

๋ฌธ์ œ

๋ˆˆ๊ธˆ์˜ ๊ฐ„๊ฒฉ์ด 1์ธ Mร—N(M,Nโ‰ค100)ํฌ๊ธฐ์˜ ๋ชจ๋ˆˆ์ข…์ด๊ฐ€ ์žˆ๋‹ค. ์ด ๋ชจ๋ˆˆ์ข…์ด ์œ„์— ๋ˆˆ๊ธˆ์— ๋งž์ถ”์–ด K๊ฐœ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆด ๋•Œ, ์ด๋“ค K๊ฐœ์˜ ์ง์‚ฌ๊ฐํ˜•์˜ ๋‚ด๋ถ€๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ด ๋ช‡ ๊ฐœ์˜ ๋ถ„๋ฆฌ๋œ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด M=5, N=7 ์ธ ๋ชจ๋ˆˆ์ข…์ด ์œ„์— <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ง์‚ฌ๊ฐํ˜• 3๊ฐœ๋ฅผ ๊ทธ๋ ธ๋‹ค๋ฉด, ๊ทธ ๋‚˜๋จธ์ง€ ์˜์—ญ์€ <๊ทธ๋ฆผ 2>์™€ ๊ฐ™์ด 3๊ฐœ์˜ ๋ถ„๋ฆฌ๋œ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๊ฒŒ ๋œ๋‹ค.

https://www.acmicpc.net/upload/images/zzJD2aQyF5Rm4IlOt.png

<๊ทธ๋ฆผ 2>์™€ ๊ฐ™์ด ๋ถ„๋ฆฌ๋œ ์„ธ ์˜์—ญ์˜ ๋„“์ด๋Š” ๊ฐ๊ฐ 1, 7, 13์ด ๋œ๋‹ค.

M, N๊ณผ K ๊ทธ๋ฆฌ๊ณ  K๊ฐœ์˜ ์ง์‚ฌ๊ฐํ˜•์˜ ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, K๊ฐœ์˜ ์ง์‚ฌ๊ฐํ˜• ๋‚ด๋ถ€๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ด ๋ช‡ ๊ฐœ์˜ ๋ถ„๋ฆฌ๋œ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๋ถ„๋ฆฌ๋œ ๊ฐ ์˜์—ญ์˜ ๋„“์ด๊ฐ€ ์–ผ๋งˆ์ธ์ง€๋ฅผ ๊ตฌํ•˜์—ฌ ์ด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— M๊ณผ N, ๊ทธ๋ฆฌ๊ณ  K๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. M, N, K๋Š” ๋ชจ๋‘ 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ K๊ฐœ์˜ ์ค„์—๋Š” ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ง์‚ฌ๊ฐํ˜•์˜ ์™ผ์ชฝ ์•„๋ž˜ ๊ผญ์ง“์ ์˜ x, y์ขŒํ‘œ๊ฐ’๊ณผ ์˜ค๋ฅธ์ชฝ ์œ„ ๊ผญ์ง“์ ์˜ x, y์ขŒํ‘œ๊ฐ’์ด ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋ชจ๋ˆˆ์ข…์ด์˜ ์™ผ์ชฝ ์•„๋ž˜ ๊ผญ์ง“์ ์˜ ์ขŒํ‘œ๋Š” (0,0)์ด๊ณ , ์˜ค๋ฅธ์ชฝ ์œ„ ๊ผญ์ง“์ ์˜ ์ขŒํ‘œ๋Š”(N,M)์ด๋‹ค. ์ž…๋ ฅ๋˜๋Š” K๊ฐœ์˜ ์ง์‚ฌ๊ฐํ˜•๋“ค์ด ๋ชจ๋ˆˆ์ข…์ด ์ „์ฒด๋ฅผ ์ฑ„์šฐ๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ถ„๋ฆฌ๋˜์–ด ๋‚˜๋ˆ„์–ด์ง€๋Š” ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๊ฐ ์˜์—ญ์˜ ๋„“์ด๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.

์ถœ์ฒ˜:https://www.acmicpc.net/problem/2583

ํ’€์ด

  1. board์— ๋Œ€ํ•œ ์ขŒํ‘œ ์„ค์ •, ์ง์‚ฌ๊ฐํ˜• ์ž˜๊ทธ๋ฆฌ๊ธฐ
  2. 2์ฐจ์› ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค ์„ค์ • ์ฃผ์˜ํ•˜๊ธฐ(ํ•˜๋‚˜๋กœ ํ†ต์ผ)
  3. STL์‚ฌ์šฉ์— ์ต์ˆ™ํ•ด์ง€๊ธฐ
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
 
int board[105][105];
int dx[4] = {0, -1, 0, 1};
int dy[4] = {-1, 0, 1, 0};
int x, y, k;
queue<pair<int, int>> q;
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> y >> x >> k;
    pair<int, int> Left, Right;
    while(k--){
        cin >> Left.X >> Left.Y >> Right.X >> Right.Y;
        for(int i=y-Right.Y; i<y-Left.Y; i++){
            for(int j=Left.X; j<Right.X; j++){
                board[i][j] = -1;
            }
        }
    }
    // ์ง์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ ํ™•์ธ
    /*
    for(int i=0; i< y; i++){
        for(int j=0; j< x; j++){
            cout << board[i][j] << '\t';
        }
        cout << endl;
    }
    */
    int cArray[105];
    int index = 0;
    int area = 0;
    for(int i=0; i < y; i++){
        for(int j=0; j < x; j++){
            int cnt = 0;
            if(board[i][j] == 0){
                q.push({j, i});
                board[i][j] = 1;
                area++;
                cnt++;
            }
            while(!q.empty()){
                auto cur = q.front(); q.pop();
                for(int dir=0; dir < 4; dir++){
                    int nx = cur.X + dx[dir];
                    int ny = cur.Y + dy[dir];
                    if(nx < 0 || nx >= x || ny < 0 || ny >= y) continue;
                    if(board[ny][nx] >= 1 || board[ny][nx] == -1) continue;
                    board[ny][nx] = board[cur.Y][cur.X] + 1; 
                    q.push({nx, ny});  
                    cnt++;
                }
                if(q.empty() && cnt != 0){
                    cArray[index] = cnt;
                    index++;
                }
            }
        }
    }
    /*
    for(int i=0; i< y; i++){
        for(int j=0; j< x; j++){
            cout << board[i][j] << '\t';
        }
        cout << endl;
    }
    */
    ///*
    sort(cArray, cArray+index);   // sort ํ•จ์ˆ˜ ์ตํžˆ๊ธฐ
    cout << area << endl;
    for(int i = 0; i < index; i++){
        cout << cArray[i] << ' ';
    }
    //*/
}