먹고살려면/boj
BOJ 2667 단지번호붙이기
맨발코더
2017. 12. 27. 23:03
문제출처 : https://www.acmicpc.net/problem/2667
1. 문제요약
- N*N 맵, 5 <= N <= 25
- 0 빈공간 / 1 집
- 상하좌우로 연결된 집을 하나의 단지
- 단지의 갯수와 각 단지별 집의 갯수를 오름차순으로 출력
2. 접근방법
- 방문한적이 없고, 집이면 방문해서 상하좌우로 연결된 모든집을 방문하여 단지를 만듬
- 단지를 만들면서 집의 갯수를 같이 셈
- bfs / dfs 모두 가능
3. 시간복잡도
- 모든 칸을 한번씩 방문하므로 N^2 = 625
4. 회고
- 전역변수를 안쓰고 리턴값을 쓰니까 조금 귀찮기는 한데 초기화를 안해도 되서
- 나름의 장단점이 있는데 음...
- 방문한 집이면 맵 자체를 1 -> 0 으로 바꾸면 check 배열을 안써도 됨
- cin 만 쓰려니 공백없는 정수를 받을때는 불편함...
- sort 없이 1차원 배열을 최대 집 갯수 만큼 선언해서 단지 갯수를 입력함.
a[집 갯수] = 단지 갯수 for(int i = 0; i < n*n + 1; i++){ for(int j = 0; j < a[i]; j++){ cout << i << "\n"; } }
18.2.7
소스코드 수정 - num이 필요없잖아.. 벡터를 쓰는데
dfs만 수정함
소스코드 : dfs
소스코드 : bfs
[출처 : BOJ, 문제에 대한 모든 권리는 BOJ(acmicpc.net, startlink)에 있음]