[백준] C++ 2583번:영역 구하기!

2025. 12. 15. 18:38·알고리즘

생각할 것

1. 시작 정점과 끝 정점을 for문의 시작과 끝으로 설정

2. 방문 표시 하기

 

<정답 코드>

#include <bits/stdc++.h>
using namespace std;

int dy[4] = {1, 0, -1, 0};
int dx[4] = {0, 1, 0, -1};

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int mx, my, sq;
    cin >> mx >> my >> sq;
    vector<vector<int>> v (my, (vector<int> (mx, 0)));
    vector<vector<int>> vis (my, (vector<int> (mx, 0)));
    
    for (int i = 0; i < sq; i++) {
        int sy, sx;
        int ey, ex;
        cin >> sy >> sx;
        cin >> ey >> ex;
        for (int n = sy; n < ey; n++) {
            for (int m = sx; m < ex; m++) {
                v[n][m] = 1;
            }
        }
    }
    vector<int> areaList;
    int cnt = 0;
    queue<pair<int, int>> q;
    for (int y = 0; y < my; y++) {
        for (int x = 0; x < mx; x++) {
            if (v[y][x] == 0 && vis[y][x] == 0) {
                int area = 1;
                cnt++;
                q.push({y, x});
                vis[y][x] = 1;
                while (!q.empty()) {
                    auto cur = q.front();
                    q.pop();
                    for (int i = 0; i < 4; i++) {
                        int yy = cur.first + dy[i];
                        int xx = cur.second + dx[i];
                        if (yy > -1 && yy < my && xx > -1 && xx < mx && v[yy][xx] == 0 && vis[yy][xx] == 0) {
                            area++;
                            q.push({yy, xx});
                            vis[yy][xx] = 1;
                        }
                    }
                }
                areaList.push_back(area);
            }
        }
    }
    cout << cnt << "\n";
    
    sort(areaList.begin(), areaList.end());
    for(int a : areaList) {
        cout <<a << " ";
    }

    return 0;
}

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

[백준] C++ 5014번:스타트링크!  (0) 2025.12.16
[백준] C++ 2667번:단지번호붙이기!  (0) 2025.12.16
[백준] C++ 5427번: 불!  (0) 2025.12.15
[백준] C++ 7562번:나이트의 이동!  (0) 2025.12.15
[백준] C++ 7569번:토마토!  (0) 2025.12.14
'알고리즘' 카테고리의 다른 글
  • [백준] C++ 5014번:스타트링크!
  • [백준] C++ 2667번:단지번호붙이기!
  • [백준] C++ 5427번: 불!
  • [백준] C++ 7562번:나이트의 이동!
Deepmind_딥마인드
Deepmind_딥마인드
깊게 사고하자
  • Deepmind_딥마인드
    딥마인드
    Deepmind_딥마인드
  • 전체
    오늘
    어제
    • 분류 전체보기 (19)
      • 알고리즘 (11)
      • 메모 (0)
      • C언어 (0)
      • C언어 동아리 (0)
      • Ubuntu (0)
      • Ollama (1)
      • AI (4)
      • 정보공유 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ubuntu server 24.04.4 LTS
    c언어
    냄새
    agent
    Ai
    DBeaver
    렉
    OpenAI
    만다라트 #오타니 #목표설정 #무료템플릿
    Air Pods Pro
    ollama
    에어팟
    Claude
    소셜딜레마 #넷플릭스 #다큐멘터리 #넷플릭스 영화추천
    단차
    백준
    에어팟 프로
    노이즈캔슬링
    호환
    배터리 광탈
    스크래치
    먼지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Deepmind_딥마인드
[백준] C++ 2583번:영역 구하기!
상단으로

티스토리툴바