2096번: 내려가기
첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.
www.acmicpc.net
- 골드 4라고 되어있긴 하지만, 체감 난이도는 실버 4 정도 되는 것 같다.
- 위에서 아래로 내려가기 때문에, 이미 지나간 정보들은 다시 쓰일 일 없으므로 입력을 받을 때 마다 처리해주면 된다.
- 위치도 3개 고정이므로 각 자리별로 업데이트 가능한 조합들이 미리 정해져 있다. (왼쪽의 경우 - 왼쪽+왼쪽, 가운데+왼쪽)
- 각 위치별로 가능한 최댓값과 최솟값 구하면서 쭉 훑으면 된다.
import sys
n = int(input())
maxX, maxY, maxZ, minX, minY, minZ = 0,0,0,0,0,0
for line in sys.stdin:
a,b,c = map(int, line.strip().split()) # 스트리밍하게 한줄씩 받아서
x = max(maxX+a, maxY+a) # 왼쪽 위치가 가능한 최댓값
y = max(maxX+b, maxY+b, maxZ+b) # 중간 위치가 가능한 최댓값
z = max(maxY+c, maxZ+c) # 오른쪽 위치가 가능한 최댓값을 구한 뒤
maxX, maxY, maxZ = x, y, z # 각 위치의 최댓값 업데이트
x = min(minX+a, minY+a) # 최솟값은 똑같이
y = min(minX+b, minY+b, minZ+b)
z = min(minY+c, minZ+c)
minX, minY, minZ = x, y, z
print(max(maxX, maxY, maxZ), min(minX, minY, minZ)) # 가능한 최댓값과 최솟값 출력
'PS > BOJ' 카테고리의 다른 글
[백준] 2638 : 치즈 (0) | 2021.03.28 |
---|---|
[백준] 2206 : 벽 부수고 이동하기 (0) | 2021.03.26 |
[백준] 1967 : 트리의 지름 (0) | 2021.03.20 |
[백준] 1865 : 웜홀 (0) | 2021.03.17 |
[백준] 3273 : 두 수의 합 (0) | 2021.03.16 |