강의로 돌아가기
이찬종

런타임 에러 해결 방법을 알고 싶습니다.

작성한 코드는 아래와 같습니다. 나머지는 다 통과하는데 코드 채점의 테스트 1에서 런타임 에러가 뜨네요. 어떻게 하면 시간을 줄일 수 있을까요?

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def solution(L, x):
    answer = []
    if x not in L:
        answer.append(-1)
    else:    
        b=0
        for i in L:
            len1 = len(L)
            if x == i:
                a = L.index(i)+b
                answer.append(a)
                L = L[a+1:]
                len2 = len(L)
                b = len1-len2
    return answer
1 개의 답변
이시윤

런타임 에러 라고 출력되는 것은, 이 알고리즘의 실행 시간이 제한을 넘어서 생기는 것이 아니고, 이 프로그램이 정해진 테스트 케이스를 실행하다가 (런타임에) 에러가 발생한다는 뜻입니다.

위 코드를 입력하고 실행 을 눌러보세요. 예제로 주어진 (코드 채점에 이용되는 것 말고) 케이스의 마지막 입력에 대해서도 에러가 발생합니다. 이 에러를 없애고 알고리즘이 여러 가지의 (조금 더 자세하게 말한다면, 발생 가능한 모든 경우의) 입력에 대해서 올바르게 동작할 수 있도록 수정해보시기 바랍니다.

예를 들어, L = [1, 1, 1] 이고 x = 1 인 경우에 대해서, 정답은 [0, 1, 2] 입니다. 하지만 이 알고리즘의 실행은 에러를 야기합니다. 이 입력을 이용해서, 눈 (과 손, 그리고 종이와 연필?) 으로 알고리즘의 단계를 직접 따라해보십시오. 변수 a 의 값을 계산하고 L12 에서 L = L[a + 1:] 로 슬라이싱을 할 때 의도한 바와 같이 지금 발견한 원소의 뒷부분으로 리스트를 잘라내지 못함을 발견할 수 있을 것입니다.

조금만 수정하면 올바르게 동작하는 코드가 되겠네요.

  • 이찬종
    말씀해주신대로 다시 해보겠습니다. 친절한 답변 감사드립니다. 이찬종 2018.12.26 17:10
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.