강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của kyg88218613
kyg88218613

câu hỏi đã được viết

[Python] Thuật toán DFS mà ngay cả sinh viên giáo dục khai phóng cũng có thể hiểu được! - Giới thiệu

Số phần tử kết nối (Baekjun 11724)

11724 문제 질문

Đã giải quyết

Viết

·

289

1

안녕하세요. 공부하다가 또 질문이 생겨 다시 한 번 질문 드립니다...리스트를 조회하는 것보다 딕셔너리를 조회하는 것이 더 빠를 거 같아서 문제의 그래프를 딕셔너리 자료형으로 바꿔주고 있는데요.제가 작성한 코드가 로컬에서 예시를 넣었을 때는 잘 되는데 백준에서는 틀린 답이라고 나옵니다..코드를 첨부하여 질문 드리고 싶은데, 멘토링 부분이 어디있는지 알려주시면 감사하겠습니다!
python코딩-테스트알고리즘dfspython3

Câu trả lời 2

1

kyg8821님의 프로필 이미지
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)
kyg8821님의 프로필 이미지
kyg8821
Người đặt câu hỏi

제가 작성한 코드에요!

gaebaljob님의 프로필 이미지
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): 로 바꾸면 정답이 잘 나올것 같습니다 :)

 

0

gaebaljob님의 프로필 이미지
gaebaljob
Người chia sẻ kiến thức

여기에 코드 올려주셔도 봐드려요 🙂 올려주세요!

kyg8821님의 프로필 이미지
kyg8821
Người đặt câu hỏi

코드 올려드렸어요!

kyg8821님의 프로필 이미지
kyg8821
Người đặt câu hỏi

근데 문제를 살펴보면 u와 v가 같지 않아야한다는 조건이 있어서, 혼자 동 떨어져있는 노드의 경우가 발생할 수 있는지 의문이 생깁니다..

gaebaljob님의 프로필 이미지
gaebaljob
Người chia sẻ kiến thức

네 u,v 가 다르다는 건 서로 다른 두개의 노드가 연결되었다 (다른 말로 1, 1 혹은 2, 2 와 같이 한 노드가 자기 자신과 연결될 수는 없다)는 의미이지, 모든 노드가 포함된다는 의미는 아닙니다. 그래서 1부터 N+1까지 모두 확인이 필요합니다!

kyg8821님의 프로필 이미지
kyg8821
Người đặt câu hỏi

아!! 이해했습니다! 설명 너무 감사드려요 ㅠㅠ

Hình ảnh hồ sơ của kyg88218613
kyg88218613

câu hỏi đã được viết

Đặt câu hỏi