CodongCodong   4년 전

disjoint set을 이용해서 문제를 풀었는데 파이썬3으로는 계속 런타임에러가 떠러 C로 짰더니 문제없이 통과가 되네요. 

C에서의 런타임에러는 주로 배열 범위초과같은 문제 때문이었는데 파이썬에서 런타임에러가 발생하는 원인이 따로 존재하나요? 파이썬에서만 발생하는 런타임에러라든가...

파이썬 코드는 아래와 같습니다. 

G = int(input())
P = int(input())

root = []

for i in range(G+1):
    root+=[i]

def find(n):
    if n==root[n]:
        return n
    root[n] = find(root[n])
    return root[n]

list = []

for i in range(P):
    list+=[int(input())]

ans=0

for p in list:
    r = find(p)
    if r==0:
        break
    root[r] = r-1
    ans+=1

print(ans)

CodongCodong   4년 전

아 for p in list가 문제인가 싶어 for i in range(P)로 한후 list[i]로 했는데도 런타임에러가 났습니다. 

sait2000   4년 전

파이선은 재귀호출 깊이가 1000으로 설정되어있어서 늘려줘야 합니다. sys 모듈의 setrecursionlimit 같은 걸로 말이죠. 아니면 union 함수를 만들어서 rank 최적화같은 걸 하면 재귀호출의 깊이가 O(log n)이 돼서 문제가 사라집니다.

CodongCodong   4년 전

아 파이썬은 재귀호출 깊이 제한이 있군요.. 감사합니다!

댓글을 작성하려면 로그인해야 합니다.