DECUAL 문제 파이썬 질문 있습니다.

  • imes
    imes
    #https://algospot.com/judge/problem/read/DECUAL
    testcount = int(input())
    inputList = [input() for y in range(testcount*2)]
    
    def isNumber(s):
        try:
            float(s)
            return True
        except ValueError:
            return False
    
    def decrypt(inputstring) :
        size = len(inputstring)
        returnList = ""
        i = 0
    
        while i < size :
            if inputstring[i] == '(' :
                end = i
                while inputstring[end+1] != ')':
                    end = end + 1
                #list[i+1:end+1]까지 해야함. end+2의 위치엔 항상 ^가 있으니 바로 3으로 간다. end+3 부터는 숫자일 것이다.
                times = 0
                j = end + 3
                print(j)
                **while isNumber(inputstring[j]) and  j < size:**
                    j = j+1
                    print(j)
                timeString = inputstring[end+3:j]
                length = len(timeString)
                for x in range(length) :
                    k = int(timeString[x])
                    times = times + k*10**x
                i = j
                for k in range(times) :
                    returnList = returnList + returnList[i+1:end+1]
            else :
                returnList = returnList + str(inputstring[i])
                i = i+1
        return returnList
    
    
    for test in range(testcount) :
        inputString1 = str(inputList[2*test])
        inputString2 = str(inputList[2*test+1])
        if decrypt(inputString1) == decrypt(inputString2) :
            print("YES")
        else :
            print("NO")
    

    문제를 풀고 있는 데 while isNumber 부분에서 오류가 있습니다. String index out of range. 근데 제 실력으로는 왜 이 오류가 일어나는지 이해가 안가서요.(j값이 문자열 길이보다 크지는 않을 것 같은데) 오류가 일어나는 부분은 ^기호 이후로 나오는 숫자를 감지해서 기록하기 위한 부분입니다.


    6년 전
2개의 댓글이 있습니다.
  • imes
    imes

    참고로 사용한 입력 예시는 다음과 같습니다.

    1
    COOKIERUNRUNRUNRUNRUN
    C(O)^2KIE(RUN)^5


    6년 전 link
  • seico75
    seico75

    마지막 5를 확인할때 inputstring[j]를 j<size보다 먼저 평가해서
    그런거 같습니다. 순서를 바꾸거나 하셔야할꺼 같습니다.
    참고로 int("123") 은 123, "abc"*3 은 "abcabcabc"를 이용하면 더 간단하고 깔끔해질것 같습니다 .


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