https://www.acmicpc.net/problem/2096
๋ฉ๋ชจ๋ฆฌ ์ ํ(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 [:] ์ด๋ฐ ์์ผ๋ก ๋ณต์ฌํด๋ ๊ด์ฐฎ๋ค.
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 17626 Four Squares (python ํ์ด์ฌ) (0) | 2022.07.05 |
---|---|
[๋ฐฑ์ค] 2293 ๋์ 1 (python ํ์ด์ฌ) (1) | 2022.07.05 |
[๋ฐฑ์ค] 16928 ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (python ํ์ด์ฌ) (0) | 2022.07.03 |
[๋ฐฑ์ค] 5525 IOIOI (python ํ์ด์ฌ) (0) | 2022.07.03 |
[๋ฐฑ์ค] 9375 ํจ์ ์ ์ ํด๋น (python ํ์ด์ฌ) (0) | 2022.06.29 |