bong-u/til

백준 - 2096 : 내려가기 (G5)

수정일 : 2024-11-15

 1N = int(input())
 2L = [list(map(int, input().split())) for _ in range(N)]
 3dp1 = [L[0][i] for i in range(3)]
 4dp2 = [L[0][i] for i in range(3)]
 5
 6for i in range(1, N):
 7tmp1 = [0]*3
 8tmp2 = [0]*3
 9for j in range(3):
10
11        if j == 0:
12            tmp1[0] = L[i][j] + max(dp1[0], dp1[1])
13            tmp2[0] = L[i][j] + min(dp2[0], dp2[1])
14        elif j == 1:
15            tmp1[1] = L[i][j] + max(dp1[0], dp1[1], dp1[2])
16            tmp2[1] = L[i][j] + min(dp2[0], dp2[1], dp2[2])
17        else:
18            tmp1[2] = L[i][j] + max(dp1[1], dp1[2])
19            tmp2[2] = L[i][j] + min(dp2[1], dp2[2])
20    dp1 = [i for i in tmp1]
21    dp2 = [i for i in tmp2]
22
23print (max(dp1), min(dp2))
  • Memoization과정이 다른 memoization 변수에 대해 종속적이라면 잘못된 결과를 초래한다
  • 위 코드에서는 이를 방지하기 위해 tmp1, tmp2 변수를 사용한다
  • 깊이 생각하지 않고 여러 번 제출해서 WA개수가 조금 많다;;