99클럽 코테 스터디 20일차 TIL + 사칙연산

히치키치·2024년 6월 8일
0

항해99코테스터디

목록 보기
11/13
def solution(arr):
    answer = -1
    n = len(arr)
    max_dp = [[0 for _ in range(n)] for _ in range(n)]
    min_dp = [[0 for _ in range(n)] for _ in range(n)]
    for i in range(n):
        if i%2==0: ## 짝수번째에 숫자 있음
            arr[i]=int(arr[i])
            min_dp[i][i]=max_dp[i][i]=arr[i]
    for x in range(3,n+1,2):
        for left in range(0,n,2):
            right = x + left -1
            max_, min_ = [], []
            if right>=n:
                break
            for op_idx in range(left+1, right,2):
                if arr[op_idx]=="+":
                    max_.append(max_dp[left][op_idx-1]+max_dp[op_idx+1][right])
                    min_.append(min_dp[left][op_idx-1]+min_dp[op_idx+1][right])
                elif arr[op_idx]=="-":
                    max_.append(max_dp[left][op_idx-1]-min_dp[op_idx+1][right])
                    min_.append(min_dp[left][op_idx-1]-max_dp[op_idx+1][right])
            max_dp[left][right] = max(max_)
            min_dp[left][right] = min(min_)
    answer = (max_dp[0][-1])
    return answer

0개의 댓글