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개수가 조금 많다;;