몽셀통통의 블로그
[BaekJoon] 2667 단지번호붙이기 :: monton 본문
문제
https://www.acmicpc.net/problem/2667
풀이
dfs를 이용하여 단지를 라벨링 한 후,
갯수를 세어 sort하여 출력
코드
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 | #include <iostream> #include <algorithm> using namespace std; int N,num; int arr[26][26]; int visit[26][26]; int sortnum[700]; int dir[4][2] = { {-1,0},{0,1},{1,0},{0,-1} }; void func(int x, int y) { if (x < 0 || x >= N || y < 0 || y >= N) return; if (visit[x][y] || !arr[x][y]) return; visit[x][y] = 1; arr[x][y] = num; for (int i = 0; i < 4; i++) { func(x + dir[i][0], y + dir[i][1]); } } int main() { cin >> N; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { scanf("%1d", &arr[i][j]); } } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (!visit[i][j] && arr[i][j]) num++, func(i, j); } } int a = 1; for (int z = 0; z < num; z++) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (arr[i][j] == a) sortnum[z]++; } } a++; } sort(sortnum, sortnum + num); cout << num <<endl; for (int i = 0; i < num; i++) { cout << sortnum[i] <<endl; } } | cs |
'프로그래밍 > 백준 문제 풀기' 카테고리의 다른 글
[BaekJoon] 1194 달이 차오른다, 가자 :: monton (0) | 2018.05.30 |
---|---|
[BaekJoon] 5427 불 :: monton (0) | 2018.05.29 |
[BaekJoon] 1260 DFS와 BFS :: monton (0) | 2018.05.27 |
[BaekJoon] 2146 다리 만들기 :: monton (0) | 2018.05.27 |
[BaekJoon] 1987 알파벳 :: monton (0) | 2018.05.27 |