백준 2096(내려가기) - Python(파이썬) - 다이나믹 프로그래밍,메모리 초과
반응형
※ 이 문제의 경우 메모리 초과를 조심해야한다. 배열을 막 선언할 경우 메모리 초과가 날 수 있다
※ 또, 파이썬의 경우 =으로 복사할 경우 같은 곳을 참조하여서 문제가 될 수 있다. 따라서 copy()를 이용하여서 복사한다.
풀이방법
① dp_max,dp_min을 선언하는데 이때 첫째줄 한줄만 입력 받는다.
② for문으로 그 담줄부터 입력받으므로 1부터 N전까지 입력받아서 a,b,c로 입력받는다.
③ 앞에 있었던
dp_max의 0번째 항에는 dp_max의 0번째항과 1번째항만 올 수 있으므로 dp_max[0],dp_max[1]의 최댓값과 + a,
dp_max의 1번째 항에는 dp_max 0번째항, 1번째항, 2번째항의 최댓값 + b,
dp_max의 2번째 항에는 dp_max 0번째항, 1번째항, 2번째항의 최댓값 + c
이런식으로 올 수 있으므로 이를 이용하여 dp_max를 새로 입력받는다. 이와 마찬가지로 min 또한 동일하게 적용한다.
import sys
N=int(sys.stdin.readline())
dp_max=list(map(int,sys.stdin.readline().split()))
dp_min=dp_max.copy()
for i in range(1,N):
a,b,c = map(int,sys.stdin.readline().split())
dp_max=[a+max(dp_max[0],dp_max[1]),b+max(dp_max[0],dp_max[1],dp_max[2]),c+max(dp_max[1],dp_max[2])]
dp_min=[a+min(dp_min[0],dp_min[1]),b+min(dp_min[0],dp_min[1],dp_min[2]),c+min(dp_min[1],dp_min[2])]
print(max(dp_max),min(dp_min))
반응형
'[백준] Python,Java로 풀기📖 > 다이나믹' 카테고리의 다른 글
백준 20152(Game Addiction) - Python(파이썬) - 다이나믹 (0) | 2022.06.06 |
---|---|
백준 14494(다이나믹이 뭐에요?) - Python(파이썬) - 다이나믹 (0) | 2022.06.02 |
백준 2502(떡 먹는 호랑이) - Python(파이썬) - 다이나믹프로그래밍 (0) | 2022.05.30 |
백준 2293(동전 1) - Python(파이썬) - 다이나믹 (0) | 2022.05.29 |
백준 1309(동물원) - Python(파이썬),Java(자바) - 다이나믹 (0) | 2022.05.28 |