cmod.ify

[2096] 내려가기 본문

BASIC/코딩테스트

[2096] 내려가기

modifyC 2026. 1. 23. 14:59
728x90
반응형

처음에 2차원 리스트로 만들었더니 메모리 초과 ㅠㅠ

어쩐지 너무 쉽더라

import sys
import heapq

input = sys.stdin.readline

n = int(input())
gra = []
gra.append([0 for _ in range(n + 2)])

for i in range(1, n + 1):
    li = list(map(int, input().strip().split()))
    gra.append([0] + li + [0])

xdp = [[0] * (n + 2) for _ in range(n + 1)]
ndp = [[sys.maxsize] * (n + 2) for _ in range(n + 1)]
ndp[0] = [0 for _ in range(n + 2)]

for i in range(1, len(gra)):
    for j in range(1, n + 1):
        xdp[i][j] = gra[i][j] + max(xdp[i - 1][j - 1], xdp[i - 1][j], xdp[i - 1][j + 1])
        ndp[i][j] = gra[i][j] + min(ndp[i - 1][j - 1], ndp[i - 1][j], ndp[i - 1][j + 1])


print(max(xdp[n]), min(ndp[n]))

 

1차원 배열로 해야 한다

입력 받으면서 바로 바로 값을 변경 해야한다

import sys
import heapq

input = sys.stdin.readline

n = int(input())
pre = list(map(int, input().strip().split()))
xdp = pre[:]
ndp = pre[:]

for _ in range(1, n):
    gra = list(map(int, input().strip().split()))
    # 왼쪽 일 때
    x1 = gra[0] + max(xdp[0], xdp[1])
    n1 = gra[0] + min(ndp[0], ndp[1])
    # 가운데 일 때
    x2 = gra[1] + max(xdp[0], xdp[1], xdp[2])
    n2 = gra[1] + min(ndp[0], ndp[1], ndp[2])
    # 오른쪽 일 때
    x3 = gra[2] + max(xdp[1], xdp[2])
    n3 = gra[2] + min(ndp[1], ndp[2])
    xdp = [x1, x2, x3]
    ndp = [n1, n2, n3]

print(max(xdp), min(ndp))
728x90
반응형

'BASIC > 코딩테스트' 카테고리의 다른 글

[15686] 치킨 배달  (0) 2026.02.19
[12865] 평범한 배낭  (0) 2026.01.26
[1916] 최소비용 구하기  (0) 2026.01.22
[11660] 구간 합 구하기5  (0) 2026.01.21
[1991] 트리 순회  (0) 2026.01.19