개발자 톡

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

같은 코드에서 순서만 바꿨는데 메모리 초과가 발생하는 이유가 궁금합니다.

등록일
2024-04-02 22:28:49
조회수
59
작성자
dbsgpp1256

같은 코드에서 순서만 바꿨는데 위에 코드는 4가지 테스트 케이스에서 메모리초과가 발생하고 아래는 메모리초과가 발생하지 않습니다. 그 이유가 무엇인가요?


#메모리 초과 발생 코드

import sys 

sys.setrecursionlimit(10**6)
def DFS(now, visit, adj):
    if visit[now]==1:
        return
    else:
        visit[now]=1
        for neighbor in adj[now]:
            DFS(neighbor, visit, adj)
    return


n,m=map(int, input().split())   # 정점, 간선 
adj=[[] for _ in range(n+1)]    # 노드별 이동 가능한 노드들 정보
adjR=[[] for _ in range(n+1)]   # adj_reverse
for _ in range(m):
    a,b,=map(int,input().split())
    adj[a].append(b)    # a노드에서 b노드로 갈수 있음
    adjR[b].append(a)
S,T=map(int, input().split())   # S->T S가 집 T가 회사


# 목적: S->T와 T->S로 모두에서 방문 가능한 정점의 개수를 출력한다.
fromS=[0]*(n+1)
fromS[T]=1          # S->T 1로 미리 세팅
fromT=[0]*(n+1)
fromT[S]=1          # T->S 1로 미리 세팅
toS=[0]*(n+1)
toT=[0]*(n+1)

DFS(S,fromS, adj)
DFS(T,fromT, adj)
DFS(S,toS, adjR)
DFS(T,toT,adjR)

count=0
for i in range(1,n+1):
    if fromS[i] and fromT[i] and toS[i] and toT[i]: # 이렇게가는거랑 저렇게 가는거랑 모두 1일때만
        count+=1

print(count-2)


#메모리 초과 발생 X

import sys 

sys.setrecursionlimit(10**6)
def DFS(now, visit, adj):
    if visit[now]==1:
        return
    else:
        visit[now]=1
        for neighbor in adj[now]:
            DFS(neighbor, visit, adj)
    return


n,m=map(int, input().split())   # 정점, 간선 
adj=[[] for _ in range(n+1)]    # 노드별 이동 가능한 노드들 정보
adjR=[[] for _ in range(n+1)]   # adj_reverse
for _ in range(m):
    a,b,=map(int,input().split())
    adj[a].append(b)    # a노드에서 b노드로 갈수 있음
    adjR[b].append(a)
S,T=map(int, input().split())   # S->T S가 집 T가 회사


# 목적: S->T와 T->S로 모두에서 방문 가능한 정점의 개수를 출력한다.
fromS=[0]*(n+1)
fromS[T]=1          # S->T 1로 미리 세팅
DFS(S,fromS, adj)

fromT=[0]*(n+1)
fromT[S]=1          # T->S 1로 미리 세팅
DFS(T,fromT, adj)

toS=[0]*(n+1)
DFS(S,toS, adjR)

toT=[0]*(n+1)
DFS(T,toT,adjR)

count=0
for i in range(1,n+1):
    if fromS[i] and fromT[i] and toS[i] and toT[i]: # 이렇게가는거랑 저렇게 가는거랑 모두 1일때만
        count+=1

print(count-2)


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

이 카테고리의 톡 더보기