Link : programmers.co.kr/learn/courses/30/lessons/43162
1. 문제
- 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.
컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오.
2. 문제의 조건
- 1 <= n <= 200
- i와 j가 연결 되어있으면 computer[i][j] = 1 로 표현
더보기
3. 문제 접근
- 시간 복잡도
추후보강
- 아이디어
주어진 인접행렬 정보를 인접리스트로 바꾸어 그것으로 DFS로 탐색하는 아이디어를 떠올렸습니다.
처음엔 겹친 부분의 network을 del하여 줄여갔더니 4, [[1, 1, 0, 0], [1, 1, 0, 0], [0, 0, 1, 1], [0, 0, 1, 1]]
다음과 같은 엣지케이스가 발생하였습니다. 그래서 삭제하지말고 같은 레벨에 있는 것들은 레벨끼리 묶기로 하였습니다.
4. 풀이 방법
- 인접행렬을 인접리스트로 변환합니다.
해당 케이스는 중복을 줄이기위해 dict에 set으로 적용하였습니다. - 각 네트워크를 dict로 생성합니다.
- 인접리스트에 존재하는 모든 지점을 방문합니다.
탐색을 시작하는데 아직 방문하지 않은 장소가 있다면 레벨을 표시해주고
한번 더 DFS를 수행합니다. - DFS가 끝나면 레벨 단위로 표시가 되어있고, -1은 아직 방문하지 않은 네트워크이므로 독립적인 네트워크가 됩니다. -1인 것들은 따로 개수를 세준 다음
같은 레벨에 존재하는 것들의 개수를 함께 더해줍니다.
5. 소스코드
cjw.git@gmail.com
'알고리즘 > programmers' 카테고리의 다른 글
68645: 삼각 달팽이 (0) | 2021.01.06 |
---|---|
49993: 스킬트리 (0) | 2021.01.06 |
42860: 조이스틱(그리디) (0) | 2021.01.06 |
42238: 입국심사[이분탐색] (0) | 2021.01.06 |
43165: 타겟 넘버[DFS/BFS] (0) | 2021.01.05 |
댓글