개발자 톡
연습문제 톡
[HSAT 6회 정기 코딩 인증평가 기출] 출퇴근길
같은 코드에서 순서만 바꿨는데 메모리 초과가 발생하는 이유가 궁금합니다.
- 등록일
- 2024-04-02 22:28:49
- 조회수
- 451
- 작성자
- 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회_정기_코딩_인증평가_기출]_출퇴근길