[BOJ][๐ก4][๋ฐฑ์ค#02096] ๋ด๋ ค๊ฐ๊ธฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
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]))
๋๊ธ๋จ๊ธฐ๊ธฐ