[BOJ][๐ŸŸก4][๋ฐฑ์ค€#02096] ๋‚ด๋ ค๊ฐ€๊ธฐ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #2096


๋ฌธ์ œ

N์ค„์— 0 ์ด์ƒ 9 ์ดํ•˜์˜ ์ˆซ์ž๊ฐ€ ์„ธ ๊ฐœ์”ฉ ์ ํ˜€ ์žˆ๋‹ค. ๋‚ด๋ ค๊ฐ€๊ธฐ ๊ฒŒ์ž„์„ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด ๊ฒŒ์ž„์€ ์ฒซ ์ค„์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋งˆ์ง€๋ง‰ ์ค„์—์„œ ๋๋‚˜๊ฒŒ ๋˜๋Š” ๋†€์ด์ด๋‹ค. ๋จผ์ € ์ฒ˜์Œ์— ์ ํ˜€ ์žˆ๋Š” ์„ธ ๊ฐœ์˜ ์ˆซ์ž ์ค‘์—์„œ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์„œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์ค„๋กœ ๋‚ด๋ ค๊ฐ€๋Š”๋ฐ, ๋‹ค์Œ ์ค„๋กœ ๋‚ด๋ ค๊ฐˆ ๋•Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ๋‹ค. ๋ฐ”๋กœ ์•„๋ž˜์˜ ์ˆ˜๋กœ ๋„˜์–ด๊ฐ€๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด ๋ฐ”๋กœ ์•„๋ž˜์˜ ์ˆ˜์™€ ๋ถ™์–ด ์žˆ๋Š” ์ˆ˜๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด์–ด ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋ณ„ํ‘œ๋Š” ํ˜„์žฌ ์œ„์น˜์ด๊ณ , ๊ทธ ์•„๋žซ ์ค„์˜ ํŒŒ๋ž€ ๋™๊ทธ๋ผ๋ฏธ๋Š” ์›๋ฃก์ด๊ฐ€ ๋‹ค์Œ ์ค„๋กœ ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์ด๋ฉฐ, ๋นจ๊ฐ„ ๊ฐ€์œ„ํ‘œ๋Š” ์›๋ฃก์ด๊ฐ€ ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์—†๋Š” ์œ„์น˜๊ฐ€ ๋œ๋‹ค. ์ˆซ์žํ‘œ๊ฐ€ ์ฃผ์–ด์ ธ ์žˆ์„ ๋•Œ, ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜, ์ตœ์†Œ ์ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ ์ˆ˜๋Š” ์›๋ฃก์ด๊ฐ€ ์œ„์น˜ํ•œ ๊ณณ์˜ ์ˆ˜์˜ ํ•ฉ์ด๋‹ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(1 โ‰ค N โ‰ค 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์ˆซ์ž๊ฐ€ ์„ธ ๊ฐœ์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ˆซ์ž๋Š” 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ์ค‘์˜ ํ•˜๋‚˜๊ฐ€ ๋œ๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜์™€ ์ตœ์†Œ ์ ์ˆ˜๋ฅผ ๋„์–ด์„œ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

3
1 2 3
4 5 6
4 9 0


์ถœ๋ ฅ

18 6


์˜ˆ์ œ 2

์ž…๋ ฅ

3
0 0 0
0 0 0
0 0 0


์ถœ๋ ฅ

0 0


My Sol

import sys
input = sys.stdin.readline

N = int(input())
startlst = list(map(int, input().split()))
maxlst = startlst[::]
minlst = startlst[::]

i = 1
while i < N:
    a, b, c = map(int, input().split())
    maxL = max(maxlst[0], maxlst[1])
    maxR = max(maxlst[1], maxlst[2])
    maxC = max(maxL, maxR)
    minL = min(minlst[0], minlst[1])
    minR = min(minlst[1], minlst[2])
    minC = min(minL, minR)

    maxlst[0] = a + maxL
    maxlst[1] = b + maxC
    maxlst[2] = c + maxR
    minlst[0] = a + minL
    minlst[1] = b + minC
    minlst[2] = c + minR
    i += 1

print(max(maxlst), min(minlst))

DP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ์ด์ง€๋งŒ, ์‚ฌ์‹ค์ƒ ํ•˜๋“œ์ฝ”๋”ฉ์— ๊ฐ€๊นŒ์šธ ์ •๋„๋กœ ์–ด๋ ค์šธ ๊ฒŒ ์—†๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๊ทธ๋ƒฅ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•œ๋Œ€๋กœ ์œ„์ชฝ์— ์žˆ๋Š” ๊ฐ’ ์ค‘ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์˜ ๊ฐ’์—์„œ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ์•„๋ž˜ ๊ฐ’๊ณผ ๋”ํ•˜๋ฉฐ ๋‚ด๋ ค๊ฐ€๋ฉฐ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ’๊ณผ ์ž‘์€ ๊ฐ’์„ ์œ„์น˜์— ์ €์žฅํ•ด์ค€๋‹ค. ์ดํ›„ ๋งจ ๋งˆ์ง€๋ง‰ ์ค„์˜ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด ์ถœ๋ ฅํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

๋‹จ์ง€ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 2์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ž…๋ ฅ ๋ฐ›๋Š” ์ˆ˜๋ฅผ ๋งค๋ฒˆ ์ฒ˜๋ฆฌํ•ด์„œ 3๊ฐœ์งœ๋ฆฌ ๋ฐฐ์—ด์„ ๊ณ„์† ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด์—ˆ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!


๋ชจ๋ฒ”๋‹ต์•ˆ

์ถœ์ฒ˜

from sys import stdin
input=stdin.readline

n=int(input())
mxdp=[list(map(int,input().split()))]
mndp=mxdp[:]

for i in range(n-1):
    a,b,c=map(int,input().split())
    na,nb,nc=mxdp.pop()
    ma,mb,mc=mndp.pop()
    mxdp.append([a+max(na,nb),b+max(na,nb,nc),c+max(nb,nc)])
    mndp.append([a+min(ma,mb),b+min(ma,mb,mc),c+min(mb,mc)])

print(max(mxdp[0]),min(mndp[0]))

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ