개발자 톡

연습문제 톡 [HSAT 6회 정기 코딩 인증평가 기출] 출퇴근길

출퇴근길 dfs 질문

등록일
2023-04-18 02:23:59
조회수
1011
작성자
goh1211

def dfs(node,graph,visited):
    if visited[node]:
        return

    visited[node] = True

    for nx in graph[node]:
        dfs(nx, graph, visited)


visitedS = [False for _ in range(n+1)]
visitedS[t] = True
dfs(s, graph, visitedS)

visitedRS = [False for _ in range(n+1)]
dfs(t, graphR, visitedRS)

visitedT = [False for _ in range(n+1)]
visitedT[s] = True
dfs(t, graph, visitedT)

visitedRT = [False for _ in range(n+1)]
dfs(s, graphR, visitedRT)


소스 코드의 일부입니다. dfs를 이렇게 구현했을 경우에는

40-2 케이스에서 실행시간은 1181.0ms, 메모리는 202.28mb 가 나옵니다.


하지만 이를 아래처럼 변경하면,


def dfs(node,graph,visited):

    for nx in graph[node]:
        if visited[nx]:
            continue
        visited[nx] = True
        dfs(nx, graph, visited)


visitedS = [False for _ in range(n+1)]
visitedS[t] = True
visitedS[s] = True
dfs(s, graph, visitedS)

visitedRS = [False for _ in range(n+1)]
visitedRS[t] = True
dfs(t, graphR, visitedRS)

visitedT = [False for _ in range(n+1)]
visitedT[s] = True
visitedT[t] = True
dfs(t, graph, visitedT)

visitedRT = [False for _ in range(n+1)]
visitedRT[s] = True
dfs(s, graphR, visitedRT)

40-2 케이스에서 실행시간은 2041.0ms, 메모리는 1024mb로 메모리 초과가 납니다.


로직 상으로는 둘 다 동일 한 것 같은데, 왜 이러한 결과가 나왔는 지 알 수 있을까요?





* 저는 처음에 캐시의 공간 지역성 때문에, visited[nx]를 할 때마다 cache miss가 발생하여 속도가 느려졌다고 생각했었습니다. 하지만 메모리 사용량이 1024mb인 것을 보면 공간 지역성은 상관이 없는 것 같습니다... ㅠㅠ






#[hsat_6회_정기_코딩_인증평가_기출]_출퇴근길
#python

이 카테고리의 톡 더보기