2667 : 단지번호붙이기
2021-08-04

https://www.acmicpc.net/problem/2667
2667번: 단지번호붙이기
<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여
www.acmicpc.net
🏡 시도
- 처음엔 출력해야할 것이 뭔지 먼저 따져봤다.
- 단지 수와 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력해야했다.
- 단지 수 카운팅을 위한 house_cnt 변수를 선언했고, 각 단지에 속하는 집의 수를 카운팅하기위해 house_cnt 를 index로 사용하여 cnt[house_cnt] 배열에 카운팅했다.
- 단지 수와 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력해야했다.
- 이 문제는 DFS또는 BFS를 사용하는 문제라고 했는데, 어떻게 사용해야할지 감이 안왔지만 차근차근 생각해봤다.
- 1) 집이 없는 자리에는 미리 visited 해놓기
- 2) 맵을 처음부터 방문하다가 visited == 0인 집이 있다면, house_cnt를 증가시키고 그 집부터 DFS(깊이 우선 탐색을 시작한다!)
- DFS 함수에서는 상 하 좌 우를 검사해보며 인접 집이 있다면 cnt[house_cnt]를 증가시키고 visited 한 다음, 그 위치로 다시 DFS함수를 수행한다.
- 인접 집이 아무데도 없다면 함수 빠져나오기!
- DFS 함수에서는 상 하 좌 우를 검사해보며 인접 집이 있다면 cnt[house_cnt]를 증가시키고 visited 한 다음, 그 위치로 다시 DFS함수를 수행한다.
- 3) DFS함수 들어간 그 다음 집 부터 다시 map을 탐색하며 반복수행한다.
- 정렬은 Bubble Sort를 사용했다. 내 기억에 가장 구현하기 간단한 알고리즘이라 사용해보았다.
🛫코드 구현 [C99]
🧹REVIEW
- v입력을 받고나서 adj_mat에 넣어주는 코드를 홀랑 빼먹는 바람에 한참 삽질했다. 속상했다.
- 인접행렬은 익숙하지않아서 시간이 좀 걸렸다. 더 노력!!
- 난 재귀가 좀 약한 것 같다. 더더 노력!!!
- 이거랑 비슷한 배추문제도 5분만에 풀 수 있을 것 같다.