[AlgoSpot] Pi문제.py

전영서·2021년 8월 27일
0

Algorithm

목록 보기
5/89

1.문제

2.코드

C = int(input())

def memo(case) :
    memo = [-1]*10002
    
    def score(s,e) :        
        sub = list()
                
        #규칙 찾기위해 붙어있는 수의 차를 구한다
        for i in range(s,e) :
            sub.append(case[i+1] - case[i])

        if len(set(sub)) == 1 :
            if sub[0] == 0 :
                return 1

            elif sub[0] == 1 or sub[0] == -1 :
                return 2 
            
            else : 
                return 5 
        elif len(set(sub)) == 2 :
            if sub[0] == -sub[1]:
                return 4
        
        return 10 
    
    
    def memo_recur(a) :
        if a >= len(case) :
            return 0

        if memo[a] != -1 :
            return memo[a] 
        
        ret = 987654321

        for i in range(3, 6) :
            if a+i <= len(case) :
                ret = min(ret, memo_recur(a+i) + score(a, a+i-1))
 
        return ret
    
    print(memo_recur(0))

    return 0

for _ in range(C) :
    case = list(input().rstrip())
    case = map(int, case)
    case = list(case)

    memo(case)

3. Review

일단 예제 케이스는 잘 작동하는데 RTE(nonzero return code)가 나온다....

왜 그러는지 모르겠어서 일단 홈페이지에 해답을 올리는 것은 나중으로 미루기로 했다...

메모이제이션에 익숙하지 않아 처음에 2차원 배열로 캐시를 만들었는데 좀 더 많이 풀어봐야 할것 같다...

profile
꾸준히 성실하게

0개의 댓글