황소개발자

백준 9465 파이썬 python : 스티커 @@황소처럼 우직하게@@ 새벽 6시 본문

백준 문제 풀이

백준 9465 파이썬 python : 스티커 @@황소처럼 우직하게@@ 새벽 6시

hjp845 2020. 3. 4. 06:27
반응형

아래 코드는 옛날에 짯던, 실패한 코드입니다. 13일동안 방치해뒀었죠.

t = int(input())
for i in range(t):
    n = int(input())
    dp = [[0, 0] for k in range(n)]
    tmp1 = list(map(int, input().split()))
    arr = [[x] for x in tmp1]
    tmp = list(map(int, input().split()))
    print('n', n)
    print(tmp1)
    print(tmp)
    print('입력완료')
    for j, num in enumerate(tmp):
        arr[j].append(num)

    for j in range(n):
        if j == 0:
            if arr[0][0] > arr[0][1]:
                dp[0] = [arr[0][0], 0]
            else:
                dp[0] = [arr[0][1], 1]
        elif j == 1:
            before_idx = dp[j - 1][1]
            # 1더해서 2로 나눈나머지
            if arr[1][before_idx] > dp[0][0] + arr[1][(before_idx + 1) % 2]:
                dp[1] = [arr[1][before_idx], before_idx]
            else:
                dp[1] = [dp[0][0] + arr[1][(before_idx + 1) % 2], (before_idx + 1) % 2]
        else:
            if dp[j - 1][0] + arr[j][(dp[j - 1][1] + 1) % 2] > dp[j - 2][0] + arr[j][(dp[j - 2][1] + 1) % 2]:
                dp[j] = [dp[j - 1][0] + arr[j][(dp[j - 1][1] + 1) % 2], (dp[j - 1][1] + 1) % 2]
            else:
                dp[j] = [dp[j - 2][0] + arr[j][(dp[j - 2][1] + 1) % 2], (dp[j - 2][1] + 1) % 2]
    print(dp[n - 1][0])

위와 같던 코드가 아래 코드로 성장했다.

T = int(input())
for t in range(T):
    n = int(input())
    mat = [[0], [0]]
    mat[0] += list(map(int, input().split()))
    mat[1] += list(map(int, input().split()))
    dp = [[0, 0, 0] for i in range(n + 1)]
    dp[1] = [0, mat[0][1], mat[1][1]]
    for i in range(2, n + 1):
        dp[i][0] = max(dp[i - 1])
        dp[i][1] = max(dp[i - 1][2], dp[i - 1][0]) + mat[0][i]
        dp[i][2] = max(dp[i - 1][1], dp[i - 1][0]) + mat[1][i]
    print(max(dp[n]))

설계하자

반응형
Comments