PI 문제 RTE(nonzero return code) 관련 질문입니다.(python)

  • snowas
    snowas

    일단 코드는 다음과 같습니다.

    import os
    import sys
    N = []
    def classify(beg, end):
        global N
        M = N[beg:end]
    
        if M.count(M[0]) == len(M):
            return 1
    
        progressive = True
        for i in range(len(M)-1):
            if M[i+1] - M[i] != M[1] - M[0]:
                progressive = False
    
        if progressive and abs(M[1] - M[0] == 1):
            return 2
    
        alternating = True
        for i in range(len(M)):
            if M[i] != M[i%2]:
                alternating = False
    
        if alternating:
            return 4
        if progressive:
            return 5
        return 10
    
    INF = 987654321
    cache = [None]
    
    def memorize(beg):
        global N, INF, cache
        if beg == len(N):
            return 0
    
        if cache[beg] != None:
            return cache[beg]
    
        cache[beg] = INF
        for L in range(3, 5+1):
            if beg + L <= len(N):
                now = classify(beg, beg + L)
                rest = memorize(beg + L)
                cache[beg] = min(cache[beg], now + rest)
        return cache[beg]
    
    
    
    T = int(input().strip())
    for _ in range(T):
        N = [int(i) for i in input().strip()]
        cache = [None] * (len(N) + 2)
        answer = memorize(0)
        print(answer)
    


    기본적인 알고리즘은 jm북이고, 같은 알고리즘을 c++로 작성시에는 통과했습니다. 파이썬에서는 str 하고 int 타입이 구분되어있어 입력을 정수의 배열로 받고, 난이도 1을 확인할 때 count 함수를 쓴 것 정도를 제외하면 코드 구성은 거의 동일하다고 생각됩니다.
    정수형으로 숫자 받을 때 양 옆의 공백도 혹시 몰라서 제거 했고요.
    c++코드를 파이썬으로 옮기는 과정에서 무엇이 잘못되었을까요?


    7년 전
1개의 댓글이 있습니다.
  • seico75
    seico75

    abs(M[1] - M[0] == 1)

    abs(M[1] - M[0]) == 1
    아닌가요?


    7년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.