Skip to content

Latest commit

ย 

History

History
77 lines (68 loc) ยท 3.05 KB

Q1926.md

File metadata and controls

77 lines (68 loc) ยท 3.05 KB

Q1926

๋ฌธ์ œ

์ฒซ์งธ ์ค„์— ๋„ํ™”์ง€์˜ ์„ธ๋กœ ํฌ๊ธฐ n(1 โ‰ค n โ‰ค 500)๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ m(1 โ‰ค m โ‰ค 500)์ด ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ n+1 ์ค„ ๊นŒ์ง€ ๊ทธ๋ฆผ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (๋‹จ ๊ทธ๋ฆผ์˜ ์ •๋ณด๋Š” 0๊ณผ 1์ด ๊ณต๋ฐฑ์„ ๋‘๊ณ  ์ฃผ์–ด์ง€๋ฉฐ, 0์€ ์ƒ‰์น ์ด ์•ˆ๋œ ๋ถ€๋ถ„, 1์€ ์ƒ‰์น ์ด ๋œ ๋ถ€๋ถ„์„ ์˜๋ฏธํ•œ๋‹ค)

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋„ํ™”์ง€์˜ ์„ธ๋กœ ํฌ๊ธฐ n(1 โ‰ค n โ‰ค 500)๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ m(1 โ‰ค m โ‰ค 500)์ด ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ n+1 ์ค„ ๊นŒ์ง€ ๊ทธ๋ฆผ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (๋‹จ ๊ทธ๋ฆผ์˜ ์ •๋ณด๋Š” 0๊ณผ 1์ด ๊ณต๋ฐฑ์„ ๋‘๊ณ  ์ฃผ์–ด์ง€๋ฉฐ, 0์€ ์ƒ‰์น ์ด ์•ˆ๋œ ๋ถ€๋ถ„, 1์€ ์ƒ‰์น ์ด ๋œ ๋ถ€๋ถ„์„ ์˜๋ฏธํ•œ๋‹ค)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜, ๋‘˜์งธ ์ค„์—๋Š” ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋„“์€ ๊ทธ๋ฆผ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ. ๋‹จ, ๊ทธ๋ฆผ์ด ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์žฅ ๋„“์€ ๊ทธ๋ฆผ์˜ ๋„“์ด๋Š” 0์ด๋‹ค.

์ฝ”๋“œ

  1. n,m๊ณผ board๋ฐฐ์—ด ์ž…๋ ฅ
  2. ๊ทธ๋ฆผ์ด ์•„๋‹ˆ๊ฑฐ๋‚˜(board[i][j] == 0) ๋ฐฉ๋ฌธํ•œ ์  ์žˆ์„ ๋•Œ(isVisit[i][j] == 1) โ†’ continue
  3. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ทธ๋ฆผ์ผ ๋•Œ
    1. picNum++; โ†’ ์ƒํ•˜์ขŒ์šฐ ๋”์ด์ƒ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์ด ์—†๋Š” ๋ฒ”์œ„๊นŒ์ง€๊ฐ€ ๊ทธ๋ฆผ์ž„
    2. queue ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ขŒํ‘œ๋“ค์„ ๋‹ด๋Š”๋‹ค.
    3. queue์— ์‚ฝ์ž…ํ–ˆ๋‹ค๋ฉด isVisit์— ํ•ด๋‹น ์ขŒํ‘œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
    4. ์ตœ์‹  ์ขŒํ‘œ๋ฅผ ๊บผ๋‚ธ ํ›„, ํ์—์„œ ์‚ญ์ œํ•œ๋‹ค.
    5. ์ตœ์‹  ์ขŒํ‘œ์˜ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ๋Œ๋ฉฐ, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ทธ๋ฆผ์˜ ์ขŒํ‘œ๋ฅผ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค.
    6. ํ๊ฐ€ ์ „๋ถ€ ๋นŒ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
#include<bits/stdc++.h>
using namespace std;

int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
int board[502][502];
bool isVisit[502][502];
int n, m;
int main() 
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    for(int i=0;i<n;i++) {
        for(int j=0;j<m;j++) {
            cin >> board[i][j];
        }
    }
    int picNum = 0; // ๊ทธ๋ฆผ์˜ ์ˆ˜
    int maxPic = 0; // ๊ทธ๋ฆผ ์ตœ๋Œ“๊ฐ’
    for(int i=0;i<n;i++) {
        for(int j=0;j<m;j++) {
            // ๊ทธ๋ฆผ์ด ์•„๋‹ˆ๊ฑฐ๋‚˜ ๋ฐฉ๋ฌธํ•œ ์  ์žˆ๋Š” ๊ฒฝ์šฐ
            if(board[i][j] == 0 || isVisit[i][j]) continue;
            picNum++;
            queue<pair<int, int>> q;
            isVisit[i][j] = 1;
            q.push({i, j});
            int area = 0; // ๊ทธ๋ฆผ์˜ ๋„“์ด
            // ์ธ์ ‘ ์นธ์„ ๋‹ค ๋Œ ๋•Œ ๊นŒ์ง€
            while(!q.empty()) {
                area++;
                pair<int, int> current = q.front();
                q.pop();
                for(int dir=0;dir<4;dir++) {
                    int nearX = current.first + dx[dir];
                    int nearY = current.second + dy[dir];
                    if(nearX < 0 || nearX >=n || nearY <0 || nearY >=m) continue;
                    if(isVisit[nearX][nearY] || board[nearX][nearY]!=1) continue;
                    isVisit[nearX][nearY] = 1;
                    q.push({nearX, nearY});
                }
            }
            // (i, j) ๋ฅผ ์‹œ์ž‘์ ์œผ๋กœ ํ•˜๋Š” BFS ์ข…๋ฃŒ
            maxPic = max(maxPic, area);
        }
    }
    cout << picNum << "\\n" << maxPic;
    return 0;
}