-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
해결됨
11724 문제 질문
23.11.21 18:51 작성 조회수 154
1
안녕하세요. 공부하다가 또 질문이 생겨 다시 한 번 질문 드립니다...리스트를 조회하는 것보다 딕셔너리를 조회하는 것이 더 빠를 거 같아서 문제의 그래프를 딕셔너리 자료형으로 바꿔주고 있는데요.제가 작성한 코드가 로컬에서 예시를 넣었을 때는 잘 되는데 백준에서는 틀린 답이라고 나옵니다..코드를 첨부하여 질문 드리고 싶은데, 멘토링 부분이 어디있는지 알려주시면 감사하겠습니다!
답변을 작성해보세요.
1
kyg8821
질문자2023.11.21
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)
개발자로 취직하기
지식공유자2023.11.22
kyg8821님 안녕하세요!
dictionary를 쓰려는 접근은 좋았는데 구현할 때 살짝 실수가 있었던 것 같아요.
main함수에서 dfs를 호출해주는 부분에서 1부터 N까지 포함하여 모든 노드를 확인해야 하는데 지금은 딕셔너리에 있는 노드들만 확인하고 있습니다.
딕셔너리에 있는 노드라는 건 다른 노드와 한번 이상 연결되어있는 노드이기 때문에, 혼자 동 떨어져있는 노드의 경우는 계산되지 않아 오답이 나오는 것 같고요!
그래서 for node in list(dic.keys()):
위 부분을
for i in range(1,N+1):
로 바꾸면 정답이 잘 나올것 같습니다 :)
0
개발자로 취직하기
지식공유자2023.11.22
네 u,v 가 다르다는 건 서로 다른 두개의 노드가 연결되었다 (다른 말로 1, 1 혹은 2, 2 와 같이 한 노드가 자기 자신과 연결될 수는 없다)는 의미이지, 모든 노드가 포함된다는 의미는 아닙니다. 그래서 1부터 N+1까지 모두 확인이 필요합니다!
답변 2