2096번: 내려가기

첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.

www.acmicpc.net


 

메모리 제한이 너무 적어서 그냥 배열을 만들어서 하니 메모리 초과가 났다.

따로 저장을 해주지 말고 이전 것들만 저장하고 입력 받자마자 처리를 해주었다.

 

  1. 제일 첫째줄을 premin, premax에 저장한다.
  2. 1번째 것들은 모두에 들어가므로 초기에 저장하고, index가 0이 아니라면 2와 비교, 2가 아니라면 0과 비교한다.
  3. tempmin, tempmax에 저장해놓고 한번에 update해준다. (안그러면 중간에 값이 바뀌어버린다)

 

import sys
input = sys.stdin.readline

N = int(input())
premin = list(map(int, input().split()))
premax = [premin[0], premin[1], premin[2]]
tempmin = [0,0,0]
tempmax = [0,0,0]

for i in range(1, N):
    _input = list(map(int, input().split()))

    for j in range(3):
        _min = premin[1]
        _max = premax[1]
        if j != 0:
            _min = min(_min, premin[2])
            _max = max(_max, premax[2])
        if j != 2:
            _min = min(_min, premin[0])
            _max = max(_max, premax[0])

        tempmin[j] = _input[j] + _min
        tempmax[j] = _input[j] + _max

    premin = [tempmin[0],tempmin[1],tempmin[2]]
    premax = [tempmax[0],tempmax[1],tempmax[2]]

print(max(premax), min(premin))
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기