파이썬 eoferror?가 뭔가요?

조회수 98회

def max_sum(A, left, right):
    if left == right-1:
        return A[left]
    else:
        m=(left + right)//2

        left_max=max_sum(A,left,m)

        right_max=max_sum(A,m,right)

        cross_max=max_cross(A,left,m,right)
        if(left_max > right_max and left_max > cross_max):
            return left_max
        elif(right_max > left_max and right_max> cross_max):
            return right_max
        else:
            return cross_max
def max_cross(A, left, m, right):
    cross_left= float('-inf')
    cross_temp= 0
    cross_begin=m
    for i in range(m -1, left -1, -1):
        cross_temp - cross_temp + A[i]
        if cross_temp>cross_left:
            cross_left = cross_temp
            cross_begin = i
    cross_right= float('-inf')
    cross_temp=0
    cross_finish=m+1
    for i in range(m, right):
        cross_temp = cross_temp + A[i]
        if cross_temp>cross_right:
            cross_right = cross_temp
            cross_finish = i +1
    return cross_begin, cross_finish, cross_left+cross_right
    # A[left], ..., A[right-1] 중 최대 구간 합 리턴
A = input('Enter the list of numbers: ')
A = [int(x) for x in input().split()]
sol = max_sum(A, 0, len(A))
print(sol)

제 코딩을 이렇게 했는데

Traceback (most recent call last):
File "/solution.py", line 39, in <module>
A = input('Enter the list of numbers: ')
EOFError: EOF when reading a line

이런 오류가 뜨네요 이게 무슨 의민가요

  • 혹시...에디터를 어떤 걸 사용하고 계시나요? 입출력을 지원하지 않는 에디터를 사용하면 많이 나오는 오류 이긴 합니다...일단 https://repl.it/languages/python3 에디터로 사용해 보시고 같은 오류가 발생하면 다시 확인해봐야 할듯 하네요...일단 오류의 뜻은 EOF (End Of File)로 파일이 끝나는 곳이 아닌데 끝이 났다...이런 뜻으로 해석 하시면 되겠습니다. 태평장사꾼 2019.10.14 16:54
  • 알려주신 에디터를 사용하니 RECURSIONERROR가 떠서 import sys sys.setrecursionlimit(10**8)를 삽입하니 이제 repl process died unexpectedly: signal: segmentation fault (core dumped) kjw 2019.10.14 20:32
  • 라고 뜹니다 제 코드가 문제인건가요? kjw 2019.10.14 20:32
  • segmentation fault 에러는 계산 상의 오류, 잘못된 접근 또는 논리적 오류로 보입니다. 어느 라인에 어디에서 오류가 발생하는 지 찾아봐야 할듯 합니다. 의심 되는 부분에 print를 하여 찾아보세요. http://egloos.zum.com/mcchae/v/11230168, 이 것처럼 gdb를 이용한 디버깅도 있습니다. 태평장사꾼 2019.10.15 10:05
  • 재귀호출로 인해 stack 이 full 되는 듯 합니다. 재귀호출부분을 tail recursion 이 되도록 수정하던가 재귀부분을 일반적인 iteration 으로 수정해야 합니다. 정영훈 2019.10.15 13:34
  • 죄송합니다만 조금만 더 자세하게 설명 가능하겠습니까?? kjw 2019.10.15 14:01
  • 함수 호출을 하려면 파라미터를 stack 이란 메모리 공간에 적재를 시킨뒤 call op 코드를 호출합니다. 그리고 함수 return시에 스택을 정리(파리미터 삭제등)를 하게 됩니다. 이런식으로 함수 호출시 stack 이란 한정적인 공간을 사용하는데 재귀호출을 하게 되면 call to call 이므로 stack을 과도하게 사용하게 되고 결국 메모리가 넘치게 됩니다. 즉 stack이 망가지게 되고 세그멘테이션 폴트가 발생하게 됩니다. 그런 문제로 재귀호출횟수가 많다면 이 부분을 재귀호출말고 일반적인 for나 while 반복으로 재구현을 해야 합니다. 정영훈 2019.10.15 15:16

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.