문제 내용 요약
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 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 |
문제 원리파악
그래프에서 DFS를 구현 할 수 있냐 없냐의 문제를 물어보는거 같음 일단 내일시험이라 대충작성하고 나중에수정
아래 그래프에서 DFS를 탐색하는 방식 및 원리를 이해하면 풀 수 있음(나도 처음엔 뭐가 뭔지 몰랐는데 풀다보니까 조금씩 알거같긴 하겠더라)
# 노드가 3개인 그래프
graph = [
[], <- 인덱스 편하게 하기 위해서 맨앞에 그냥 빈값으로 채움
[1,2], # <- [1,1,0]
[1,2], # <- [1,1,0]
[3] # <- [0,0,1]
]
# 그래프를 방문했는지 안했는지 알기위한 리스트 / 맨앞에 빈 값의 리스트는 True로 채우니 len(graph) - 1
visited = [True] + [False] * (len(graph) - 1)
def dfs(graph, v, visited):
# 위치를 방문할 때 True로 변경해야 재방문을 안함
visited[v] = True
for i in graph[v]:
# 인접한 노드를 방문안했으면(False이면) 재귀함수를 통해 방문
if visited[i] == False:
# 예를들어 [1,2]이면 2는 아직 방문안해서 False이기 때문에 노드2로가서 방문안한 곳 찾음
dfs(graph, i, visited)
문제풀이
일단 내가 푼 방법만 올리고 나중에 정리함
def dfs(graph, v, visited):
if False not in visited:
return
visited[v] = True
print(v, graph[v], visited)
for i in graph[v]:
if visited[i] == False:
dfs(graph, i, visited)
def solution(n, computers):
answer = 0
reset_list = [[]]
for a in computers:
count = []
for j in range(len(a)):
if a[j] == 0:
continue
else:
count.append(j+1)
reset_list.append(count)
visited = [True] + [False] * (len(reset_list) -1)
print(reset_list, visited)
ctn = 0
for i in range(1,len(reset_list)):
if visited[i] == False:
dfs(reset_list,i,visited)
ctn += 1
return ctn
'공부 > 알고리즘' 카테고리의 다른 글
다리를 지나는 트럭 python - [프로그래머스/스택/큐 알고리즘] (0) | 2022.06.22 |
---|---|
음료수 얼려 먹기 python - [이코테/DFS, BFS 알고리즘] (0) | 2022.06.17 |
코테, 코딩 테스트 재귀 함수(DFS, BFS활용) 정리 - [재귀함수/알고리즘] (0) | 2022.06.09 |
9663 문제 python N-Queen [백준-골드4/백트래킹] (0) | 2022.06.08 |
구명보트 python - [프로그래머스/그리디 알고리즘] (0) | 2022.06.04 |