문제
https://programmers.co.kr/learn/courses/30/lessons/43162
코딩테스트 연습 - 네트워크
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있
programmers.co.kr
내 풀이
1) BFS 이용
from collections import deque
def solution(n, computers):
answer = n
gp = [[] for _ in range(n)]
for i in range(len(computers)):
for j in range(0, i):
if computers[i][j] == 1:
gp[i].append(j)
gp[j].append(i)
visited = [0 for _ in range(n)]
visited[0] = 1
queue = deque([0])
for i in range(len(visited)):
while queue:
node = queue.popleft()
for i in gp[node]:
if not visited[i]:
visited[i] = 1
queue.append(i)
answer -= 1
if 0 in visited:
queue.append(visited.index(0))
else:
return answer
return answer
2) BFS 이용
from collections import deque
def solution(n, computers):
answer = n
gp = [[] for _ in range(n)]
for i in range(len(computers)):
for j in range(0, i):
if computers[i][j] == 1:
gp[i].append(j)
gp[j].append(i)
visited = [0 for _ in range(n)]
queue = deque([])
while 0 in visited:
queue.append(visited.index(0))
while queue:
node = queue.popleft()
visited[node] = 1
for i in gp[node]:
if not visited[i]:
visited[i] = 1
queue.append(i)
answer -= 1
return answer
위 코드에서 queue와 visited 초기화 코드를 다르게 하니 테스트 코드도 통과하였다.
다른 풀이
def solution(n, computers):
answer = 0
bfs = []
visited = [0]*n
while 0 in visited:
bfs.append(visited.index(0))
while bfs:
node = bfs.pop(0)
visited[node] = 1
for i in range(n):
if visited[i] == 0 and computers[node][i] == 1:
bfs.append(i)
answer += 1
return answer
'⏳ 알고리즘 > python 알고리즘 문제 풀이' 카테고리의 다른 글
리트코드 - 509. Fibonacci Number (0) | 2022.04.27 |
---|---|
프로그래머스 - LV3. 단어 변환 (0) | 2022.03.25 |
프로그래머스 - [3차] 방금그곡 (2018 KAKAO BLIND RECRUITMENT) (0) | 2021.11.19 |
프로그래머스 - 삼각 달팽이(월간 코드 챌린지 시즌1) (0) | 2021.11.19 |
프로그래머스 - LV2. 더 맵게 (0) | 2021.11.06 |