λ¬Έμ
https://www.acmicpc.net/problem/2156
2156λ²: ν¬λμ£Ό μμ
ν¨μ£Όλ ν¬λμ£Ό μμνμ κ°λ€. κ·Έ κ³³μ κ°λλ, ν μ΄λΈ μμ λ€μν ν¬λμ£Όκ° λ€μ΄μλ ν¬λμ£Ό μμ΄ μΌλ ¬λ‘ λμ¬ μμλ€. ν¨μ£Όλ ν¬λμ£Ό μμμ νλ €κ³ νλλ°, μ¬κΈ°μλ λ€μκ³Ό κ°μ λ κ°μ§ κ·
www.acmicpc.net
λ΄ λ¬Έμ νμ΄
import sys
n = int(sys.stdin.readline())
wine = []
for _ in range(n):
wine.append(int(sys.stdin.readline()))
if n == 1:
print(wine[0])
elif n == 2:
print(wine[0]+wine[1])
elif n == 3:
print(max(wine[0]+wine[2], wine[1]+wine[2], max(wine[0]+wine[1], wine[0]+wine[2], wine[1]+wine[2])))
else:
sums = [wine[0], wine[0]+wine[1]]
sums.append(max(wine[0]+wine[2], wine[1]+wine[2], sums[1]))
for i in range(3, n):
sums.append(max(wine[i]+sums[i-2], wine[i]+wine[i-1]+sums[i-3], sums[i-1]))
print(max(sums))
π DP λ¬Έμ λ‘, ν¬λμ£Όλ₯Ό λ§μλ μΈ κ°μ§ 쑰건μ μ ν΄μ£Όλκ² ν¬μΈνΈ !
ν¬λμ£Όλ₯Ό μ°μν΄μ λ λ²κΉμ§ λ§μ€ μ μμΌλ―λ‘,
νλμ μ λ§λ€ μ·¨ν μ μλ μμΈλ₯Ό μΈ κ°μ§λ‘ μ 리ν μ μλ€.
(wineμ μ
λ ₯λ°μ ν¬λμ£Όλ€μ 리μ€νΈ, sumsλ μ λ§λ€ μ΅λ λμ ν¬λμ£Ό μμ 리μ€νΈμ΄λ€.)
- μ΄ μμ λ§μλ λμ , μ΄μ μμ λ§μμ§ μλλ€.
=> wine[i] + sums[i-2] - μ΄ μμ λ§μκ³ , μ΄μ μλ λ§μλ©°, μ μ μμ λ§μμ§ μλλ€.
=> wine[i] + wine[i-1] + sums[i-3] - μ΄ μμ λ§μμ§ μκ³ , μ΄μ μμ λ§μ λ€.
=> sums[i-1]
μμ κ°μ΄ ꡬν μ μλ 3κ°μ§μ κ²½μ°μ μ μ€, κ°μ₯ ν° μλ₯Ό sumsμ μ μ₯ν΄μ£Όλ©΄ λλ€.
nμ΄ 1λΆν° 3κΉμ§λ μμ μ€νμ μ μμ μΌλ‘ μ§νν μ μκΈ° λλ¬Έμ λ°λ‘ μ°μ°νκ³ ,
nμ΄ 4μΌ λ λΆν°λ μμ μΈ κ°μ§ 쑰건μ μν μ€νμΌλ‘ μμ±ν΄μ£Όμλ€.
π‘ νΌλλ°±
- κ°λ¨ν μκ°νλ©΄ μ λ§ μ¬μ΄ λ¬Έμ μΌ μ μλλ°, λλ λ무 볡μ‘νκ² μκ°ν΄λ²λ €μ λ§μ μκ°μ μΌλ€..,
- 보ν΅μ DP λ¬Έμ λ€ μ²λΌ, μ£Όμ΄μ§ μ
λ ₯μ μμλλ‘ κ°μμ 쑰건μ μ ν΄μ£Όμ΄ νλ©΄ λλ λ¬Έμ μλ€.
DPλ¬Έμ λ₯Ό μ€λλ§μ νκΈ° μμνλ λ€ κΉλ¨Ήμλ보λ€,., λ§μ΄ 곡λΆν΄μΌκ² λ€.
π [ μΆκ° ] λ€μ νμ΄λ³΄κΈ°
import sys
n = int(sys.stdin.readline().strip())
if n == 1:
print(int(sys.stdin.readline().strip()))
else:
a = [0] # νμ¬ ν¬λμ£Όλ₯Ό λ§μκ³ , μ΄μ ν¬λμ£Όλ λ§μμ§ μμ λ
b = [0] # νμ¬ ν¬λμ£Όλ₯Ό λ§μκ³ , μ΄μ ν¬λμ£Όλ λ§μ€ λ
now = int(sys.stdin.readline().strip())
a.append(now)
b.append(now)
for i in range(2, n+1):
now = int(sys.stdin.readline().strip())
a.append(max(max(a[:i-1]), max(b[:i-1])) + now)
b.append(a[i-1] + now)
print(max(max(a), max(b)))
π 첫 νμ΄λλ μΈ κ°μ§ κ²½μ°μ μλ₯Ό λ§λ€μ΄μ£Όμλλ°, μ΄λ²μλ '#2579 κ³λ¨ μ€λ₯΄κΈ°'λ¬Έμ μ λΉμ·νκ² νμλ€.
κ°μ₯ λ¨Όμ μκ°ν΄μ£Όμ΄μΌ ν λ κ°μ§ κ²½μ°μ μ
- νμ¬ ν¬λμ£Όλ₯Ό λ§μ€ λ, μ΄μ ν¬λμ£Όλ₯Ό λ§μμ§ μμλ€κ³ κ°μ ν κ²½μ°λΌλ©΄
κ·Έ μ ν¬λμ£Όλ λ§μ ¨μ μλ, μλ§μ ¨μ μλ μλ€. (μ΄ λΆλΆμ΄ κ³λ¨ μ€λ₯΄κΈ° λ¬Έμ μμ μ°¨μ΄μ ) - νμ¬ ν¬λμ£Όλ₯Ό λ§μ€ λ, μ΄μ ν¬λμ£Όλ λ§μ
¨λ€λ©΄
κ·Έ μ ν¬λμ£Όλ λ§μ ¨μΌλ©΄ μλλ€.
μμ κ°μ΄ μκ°νμ¬ a, b 리μ€νΈλ₯Ό λ§λ€μ΄μ£Όμκ³
bμ κ²½μ° μ μ ν¬λμ£Όλ₯Ό λ§μ ¨μΌλ©΄ μλκΈ° λλ¬Έμ λ°λ‘ a 리μ€νΈμ μ λμ κ°μ μΆκ°ν΄μ£Όμλ€.
aμ κ²½μ°μλ μΈμ λ§μ§λ§μΌλ‘ ν¬λμ£Όλ₯Ό λ§μ ¨λμ§ λͺ¨λ₯΄κΈ° λλ¬Έμ, μ΄μ μ λμ κ° μ€ κ°μ₯ ν° κ°μ ꡬν΄μ μΆκ°νλ€.
'4οΈβ£ Python > Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Python Algorithm] 2Γn νμΌλ§ 2 BOJ #11727 (0) | 2022.02.02 |
---|---|
[Python Algorithm] μ΄μΉμ BOJ #2193 (0) | 2022.02.01 |
[Python Algorithm] μ°μν© BOJ #1912 (0) | 2022.01.31 |
[Python Algorithm] κ°μ₯ κΈ΄ μ¦κ°νλ μμ΄ BOJ #11053 (0) | 2022.01.30 |
[Python Algorithm] μ¬μ κ°μ BOJ #4963 (0) | 2022.01.30 |
λκΈ