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


  • 골드 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

+ Recent posts