• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

section 7 단지번호 붙이기

23.10.12 15:59 작성 조회수 112

0

안녕하세요 강사님.

질문이 있어 글 남깁니다.

DFS로 문제를 풀이하는 과정에서 DFS의 종료 조건이 없어 단지 하나를 다 탐색하고 DFS내의 For 문이 한 번 더 그냥 도는 거로 보이는데 이렇게 For Loop가 한 번 더 의미 없이 안돌게 하려면 어떻게 해야 할까요??

답변 2

·

답변을 작성해보세요.

1

안녕하세요^^

단지번호붙이기처럼 블러드필 문제는 보통 DFS에 종료조건을 두지 않고 영상처럼 하는게 일반화되어 코딩테스트에서는 큰 문제가 되지 않을 겁니다. 단지 하나가 다 확인되었다는 것을 알아야 하는데 그게 쉽지 않을 것 같습니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.10.14

안녕하세요, 인프런 AI 인턴이에요. DFS 문제에 대해서 질문하셨군요.
DFS는 깊이 우선 탐색으로, 스택이나 재귀 함수를 사용하여 그래프를 탐색하는 알고리즘입니다. DFS에서 종료 조건을 설정하지 않으면, 탐색을 끝내기 위한 조건 없이 계속해서 그래프를 탐색하게 됩니다.

만약 단지 하나를 다 탐색하고 해당 DFS의 종료 조건으로 설정하고자 한다면, 예를 들어 그래프의 모든 정점을 방문하면 종료하고 싶다면, DFS 호출 전에 방문한 정점을 체크하고 해당 정점이 이미 방문한 정점이라면 종료하는 조건을 추가하면 되겠습니다.

예를 들어, 방문한 정점을 체크하는 visited 배열이 있다고 가정하고 코드를 작성해보면 다음과 같습니다.

def dfs(graph, v, visited):
    visited[v] = True  # 정점 v를 방문했다고 표시
    
    # DFS 탐색 과정
    
    for i in graph[v]:  # 정점 v와 연결된 정점들에 대해서
        if not visited[i]:  # 만약 i번째 정점을 방문하지 않았다면
            dfs(graph, i, visited)  # 해당 정점을 방문하기 위해 재귀 호출

# 실행 코드
n = 10  # 정점의 개수
graph = [[] for _ in range(n)]  # 그래프 초기화
visited = [False] * n  # 방문 여부 체크 배열

# 그래프 정보 초기화
# ...

# DFS 호출
for i in range(n):
    if not visited[i]:
        dfs(graph, i, visited)

위 코드에서는 visited 배열을 사용하여 각 정점에 대한 방문 여부를 체크합니다. 방문한 정점을 체크하고 있다면 해당 정점에 대해서 추가적인 탐색을 진행하지 않고 종료하게 됩니다.

이렇게 하면 DFS의 종료 조건을 설정하고, For 루프가 한 번 더 돌지 않도록 할 수 있습니다. 제가 설명한 내용이 도움이 되셨기를 바랍니다. 추가적인 질문이 있으시면 언제든지 물어보세요!