728x90
https://www.acmicpc.net/problem/2096
2096번: 내려가기
첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.
www.acmicpc.net
💡 문제 풀이
DP 문제이다.
메모리의 크기가 매우 작으므로 입력 값을 받는 동시에 최댓값과 최솟값을 따져준다.
✔️ 느낀 점
단순히 2차원 배열로 구현할 수 있다. 크게 어렵진 않지만 메모리 크기 때문에 조금 생각을 바꿀 필요가 있는 문제이다.
조금 바꾸는게 너무 어려웠다..
💻 코드
import sys
input = sys.stdin.readline
n = int(input())
DP_max = [0] * 3
DP_min = [0] * 3
max_ = [0] * 3
min_ = [0] * 3
for x in range(n):
a, b, c = map(int, input().split())
for y in range(3):
if y == 0:
max_[y] = a + max(DP_max[y], DP_max[y + 1])
min_[y] = a + min(DP_min[y], DP_min[y + 1])
if y == 1:
max_[y] = b + max(DP_max[y - 1], DP_max[y], DP_max[y + 1])
min_[y] = b + min(DP_min[y - 1], DP_min[y], DP_min[y + 1])
if y == 2:
max_[y] = c + max(DP_max[y], DP_max[y - 1])
min_[y] = c + min(DP_min[y], DP_min[y - 1])
for y in range(3):
DP_max[y] = max_[y]
DP_min[y] = min_[y]
print(max(DP_max), min(DP_min))
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[Python] 백준 2110번 : 공유기 설치 (0) | 2022.07.26 |
---|---|
[Python] 백준 1300번 : K번째 수 (0) | 2022.07.26 |
[Python] 백준 2225번 : 합분해 (0) | 2022.07.21 |
[Python] 백준 1764번 : 듣보잡 (0) | 2022.07.19 |
[Python] 백준 2294번 : 동전 2 (0) | 2022.07.19 |
댓글