-
[백준/BOJ] 2667번 단지번호붙이기 (C++)알고리즘 문제풀이/백준 2021. 1. 20. 01:05
전형적인 BFS 유형의 문제입니다.
2583번과 거의 동일한 문제였습니다.
#include <iostream> #include <queue> #include <vector> #include <algorithm> using namespace std; int n; int map[26][26]; int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1}; int BFS(int sx, int sy) { int cnt = 1; queue<pair<int, int > > q; q.push({ sx, sy }); map[sx][sy] = 0; while(!q.empty()) { int x = q.front().first; int y = q.front().second; q.pop(); for(int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if(nx < 0 || nx >= n || ny < 0 || ny >= n || map[nx][ny] == 0) continue; q.push({ nx, ny }); map[nx][ny] = 0; cnt++; } } return cnt; } int main(void) { // ios_base::sync_with_stdio(false); // cin.tie(0); int answer = 0; vector<int> v; scanf("%d", &n); for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { scanf("%1d", &map[i][j]); } } for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(map[i][j] == 1) { answer++; v.push_back(BFS(i, j)); } } } sort(v.begin(), v.end()); cout << answer << "\n"; for(int i = 0; i < v.size(); i++) { cout << v[i] << "\n"; } }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 16234번 인구 이동 (C++) (0) 2021.01.25 [백준/BOJ] 10942번 팰린드롬? (C++) (0) 2021.01.21 [백준/BOJ] 2583번 영역 구하기 (C++) (0) 2021.01.19 [백준/BOJ] 11060번 점프점프 (C++) (0) 2021.01.19 [백준/BOJ] 11048번 이동하기 (C++) (0) 2021.01.18