[๋ฐฑ์ค] 2096 ๋ด๋ ค๊ฐ๊ธฐ (python ํ์ด์ฌ)
https://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
๋ฉ๋ชจ๋ฆฌ ์ ํ(4MB)์ด ์๋ dp๋ฌธ์
์์ด๋์ด
1. ๋ฉ๋ชจ๋ฆฌ ์ ํ
- ๋งค์ฐ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ณด๊ณ dp๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์
- ๋จ์ํ ๋ฌธ์ ์ ์ฃผ์ด์ง N๊ฐ๋ง ๋ณด๊ณ ๋ฐฐ์ด์ ๋ง๋ค๊ธฐ์ 4MB๋ก๋ ํฑ์์ด ๋ถ์กฑํ๋ค.
- ๋ฐ๋ผ์ ์์๋ก ์ ์ฅํด์ฃผ๋ ๋ณ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ์ฌ์ฉ
์ฝ๋ ์ค๋ช
max_arr = [int(x) for x in sys.stdin.readline().rstrip().split()]
min_arr = copy.copy(max_arr)
max_temp = copy.copy(max_arr)
min_temp = copy.copy(max_arr)
๋จผ์ ์ด๊ธฐ ์ค์ .
ํ์ด์ฌ์ ์๋ copy๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ณต์ฌํ๋ค.
์์ ๋ณต์ฌ๋ฅผ ํด๋ ๊ด์ฐฎ์์ ๊ทธ๋ฅ copy ํจ.(๋ณ์๊ฐ immutable ํ๋๊น)
๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํ์ด ์์ด์ ์์๋ก ์ต๋๊ฐ, ์ต์๊ฐ์ ๋ด์์ค ์ ์๋ temp๋ฆฌ์คํธ๋ฅผ ์ถ๊ฐ๋ก ์ ์ธํ๋ค.
๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ 3์ผ๋ก ๊ฐ ์นธ์์ ๋์ฌ ์ ์๋ ์ต๋๊ฐ, ์ต์๊ฐ์ ์๋ฆฌ์ ๋ง๊ฒ ์ ๋ฐ์ดํธํด๊ฐ๋ฉด ๋๋ค.
for _ in range(N - 1):
b1, b2, b3 = map(int, sys.stdin.readline().rstrip().split())
max_arr[0] = b1 + max(max_temp[0], max_temp[1])
max_arr[1] = b2 + max(max_temp[0], max_temp[1], max_temp[2])
max_arr[2] = b3 + max(max_temp[1], max_temp[2])
min_arr[0] = b1 + min(min_temp[0], min_temp[1])
min_arr[1] = b2 + min(min_temp[0], min_temp[1], min_temp[2])
min_arr[2] = b3 + min(min_temp[1], min_temp[2])
max_temp = copy.copy(max_arr)
min_temp = copy.copy(min_arr)
์ด๋ฏธ ์ ๋ ฅ์ ํ๋ฒ ๋ฐ์๊ธฐ ๋๋ฌธ์ N - 1๋งํผ ์ ๋ ฅ ๋ฐ์ผ๋ฉด ๋๋ค.
๋จผ์ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฒซ๋ฒ์งธ, ๋ ๋ฒ์งธ, ์ธ ๋ฒ์งธ ์นธ์ ์ฌ ์ ์๋ ๊ฐ๋ค์ ๊ฐ๊ฐ ๋น๊ตํด์ ์ ์ฅํ๋ฉด ๋๋ค.
๋น๊ตํ๋ ค๋ฉด ์ด์ ์ต๋๊ฐ, ์ต์๊ฐ์ ๋ฐ๋ก ์ ์ฅํด๋ฌ์ผ ํ๋ฏ๋ก temp๋ฆฌ์คํธ์ ์ ๋ฐ์ดํธํด์ค๋ค.
์ ์ฒด ์ฝ๋
import sys, copy
N = int(input())
max_arr = [int(x) for x in sys.stdin.readline().rstrip().split()]
min_arr = copy.copy(max_arr)
max_temp = copy.copy(max_arr)
min_temp = copy.copy(max_arr)
for _ in range(N - 1):
b1, b2, b3 = map(int, sys.stdin.readline().rstrip().split())
max_arr[0] = b1 + max(max_temp[0], max_temp[1])
max_arr[1] = b2 + max(max_temp[0], max_temp[1], max_temp[2])
max_arr[2] = b3 + max(max_temp[1], max_temp[2])
min_arr[0] = b1 + min(min_temp[0], min_temp[1])
min_arr[1] = b2 + min(min_temp[0], min_temp[1], min_temp[2])
min_arr[2] = b3 + min(min_temp[1], min_temp[2])
max_temp = copy.copy(max_arr)
min_temp = copy.copy(min_arr)
print(max(max_arr), min(min_arr))
copy๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉ ์ ํ๊ณ min_arr = max_arr [:] ์ด๋ฐ ์์ผ๋ก ๋ณต์ฌํด๋ ๊ด์ฐฎ๋ค.