728x90
링크 : https://programmers.co.kr/learn/courses/30/lessons/43162?language=python3
코딩테스트 연습 - 네트워크
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있
programmers.co.kr
문제 설명
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.
컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오.
제한사항
- 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다.
- 각 컴퓨터는 0부터
n-1
인 정수로 표현합니다. - i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현합니다.
- computer[i][i]는 항상 1입니다.
입출력 예
n computers return
3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 2
3 [[1, 1, 0], [1, 1, 1], [0, 1, 1]] 1
입출력 예 설명
예제 #1
아래와 같이 2개의 네트워크가 있습니다.
예제 #2
아래와 같이 1개의 네트워크가 있습니다.
풀이 과정
- 방문 노드를 체크할 배열 (False)를 선언한다.
- 전체 노드를 for문 돌린다.
- 방문 하지 않은 노드 있을 때 해당 노드를 매개변수로 DFS에 넣어서 돌린다.
- 바로 해당 노드를 방문한다 (True)
- 해당 노드와 연결 된 & 방문하지 않은 노드 있을 때 방문하지 않은 노드로 DFS를 돌려준다.
- DFS를 재귀로 돌리기 위해 True를 먼저 만드는 게 포인트!
코드
def dfs(computers, v, visited):
visited[v] = True # 3-1. dfs 매개변수로 해당 방문하지 않은 노드를 줘서 방문
for j in range(len(computers)):
if v != j and not visited[j] and computers[v][j] == 1:
dfs(computers, j, visited) # 3-2. 해당 노드 기준으로 미방문 노드 끝까지 방문하기 = 재귀
def solution(n, computers):
answer = 0
visited = [False] * n # 1. 방문 배열 : 노드 개수만큼 False 배열 만들기
for i in range(n):
if not visited[i]: # 2. 전체 노드를 for문으로 돌면서 방문하지 않은 노드만 dfs 돌게 하기 (dfs가 한 노드가지고 끝까지 찾는 애!)
dfs(computers, i, visited)
answer+=1 # 4. 한 노드 끝까지 방문했을 때 answer 하나씩 더해주면 됨.
return answer
'Algorithm > 🔎 Problem Solving' 카테고리의 다른 글
[DFS&BFS / 중급] 타겟넘버 : DFS, BFS 차이 느낄 수 있는 문제(프로그래머스, Python, Level2) (0) | 2022.07.03 |
---|---|
[BFS / 최상급] 단어변환 (프로그래머스, Python, Level3) (2) | 2022.07.01 |
파이썬 코테 : 백준 3085 (브루스포스) (0) | 2021.04.04 |
파이썬 코테 : 프로그래머스 주식가격 (스택) (0) | 2021.04.04 |
파이썬 코테 : 프로그래머스 구명보트 (그리디) (0) | 2021.03.25 |
댓글