Cộng đồng Hỏi & Đáp của Inflearn
11724 문제 질문
Đã giải quyết
Viết
·
289
1
안녕하세요. 공부하다가 또 질문이 생겨 다시 한 번 질문 드립니다...리스트를 조회하는 것보다 딕셔너리를 조회하는 것이 더 빠를 거 같아서 문제의 그래프를 딕셔너리 자료형으로 바꿔주고 있는데요.제가 작성한 코드가 로컬에서 예시를 넣었을 때는 잘 되는데 백준에서는 틀린 답이라고 나옵니다..코드를 첨부하여 질문 드리고 싶은데, 멘토링 부분이 어디있는지 알려주시면 감사하겠습니다!
python코딩-테스트알고리즘dfspython3
Câu trả lời 2
1
kyg8821
Người đặt câu hỏi
import sys
import collections
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
N, M = map(int, input().split())
dic = collections.defaultdict(list)
visited = []
result = 0
for _ in range(M):
x, y = map(int, input().split())
dic[x].append(y)
dic[y].append(x)
def dfs(node):
global visited, dic
visited.append(node)
for n in dic[node]:
if n not in visited:
dfs(n)
for node in list(dic.keys()):
if node not in visited:
dfs(node)
result += 1
print(result)gaebaljob
Người chia sẻ kiến thức
kyg8821님 안녕하세요!
dictionary를 쓰려는 접근은 좋았는데 구현할 때 살짝 실수가 있었던 것 같아요.
main함수에서 dfs를 호출해주는 부분에서 1부터 N까지 포함하여 모든 노드를 확인해야 하는데 지금은 딕셔너리에 있는 노드들만 확인하고 있습니다.
딕셔너리에 있는 노드라는 건 다른 노드와 한번 이상 연결되어있는 노드이기 때문에, 혼자 동 떨어져있는 노드의 경우는 계산되지 않아 오답이 나오는 것 같고요!
그래서 for node in list(dic.keys()):
위 부분을
for i in range(1,N+1): 로 바꾸면 정답이 잘 나올것 같습니다 :)






제가 작성한 코드에요!