π€λ¬Έμ ν΄κ²°
S1 | λ€μ΄λλ―Ήνλ‘κ·Έλλ°
1. λ΅μ Xμ΄μ Yλ² μμ§μ¬μ λ¨Ήμ μ΅λμ μλ κ°―μ! λ³μκ° 2κ°μ΄λ 2μ°¨μ 리μ€νΈλ₯Ό λ§λ λ€.
λ€λ₯Έ λΆλ€μ λ΅μ 보면 μλ(μ¬λ ν·κ°λ¦Ό)μ μμΉκΉμ§ μ μ₯νμ¬ 3μ°¨μμΌλ‘ λ§λ λ€.
νμ§λ§ μ΄λ νμμ λ°λΌ μλ(μ¬λ)μ μμΉλ μ μ λ‘ μ ν΄μ§λ€.
νμλ² μμ§μ΄λ©΄ 2λ² λ무μ, μ§μλ² μμ§μ΄λ©΄ 1λ² λ무μ μλ€.
2. νμ μ΄(0~μλκ°―μ) μ΄μ μμ§μΌ μ μλ νμ(0~W) λ§νΌ 2μ°¨μ 리μ€νΈλ₯Ό λ§λ λ€.
dpμ 0λ²μ§Έ νμ 0μ΄λ, 0λ²μ§Έ μ΄μ μμ§μ΄μ§ μμμ λ
3. %μ€μ%
(1) λ°μ λ¨Ήλ 쑰건:
a. iμ΄μ μλκ° 1λ²μμ λ¨μ΄μ§κ³ μ΄λ νμκ° μ§μ(j % 2 == 0, 1λ² λ무μ μμΉ)νλ©΄
b. iμ΄μ μλκ° 2λ²μμ λ¨μ΄μ§κ³ μ΄λ νμκ° νμ(j % 2 == 1, 2λ² λ무μ μμΉ)νλ©΄
i-1μ΄ λ jλ² μ§Έ μμΉμ μλ μμ i-1μ΄ λ j-1λ² μ§Έ μμΉμ μλ μ μ€ ν° κ°μ + 1νμ¬ dp[i][j]λ₯Ό μ±μ΄λ€.
(2) μ λ¨Ήλ 쑰건:
a. iμ΄μ μλμ μλ(μ¬λ)μ΄ μκ°λ¦΄ λ
i-1μ΄ λ j-1, j λ² μ§Έμ maxκ°μ λ£μΌλ©΄ λλ€.
π¨ DPλ μ νμμ μΈμ°λ κ²μ΄ λ§€μ° μ€μνλ€!
π»μμ€ μ½λ
import sys
if __name__ == "__main__":
T, W = map(int, input().split())
plums = [0]
for i in range(T):
plums.append(int(sys.stdin.readline()))
dp = [[0]*(W+1) for _ in range(T+1)]
for i in range(1, T+1):
# νλ²λ μμ§μ΄μ§ μμμ λ(dp[i][0]μ μ±μ°λ κ³Όμ )
if plums[i] == 1: # μλκ° 1λ²μμ λ¨μ΄μ§ λλ§ λ°μ λ¨Ήμ μ μλ€.
dp[i][0] = dp[i-1][0] + 1
else:
dp[i][0] = dp[i-1][0]
# μ΄λ νμλ₯Ό 1λ²λΆν° W λ²κΉμ§ μμ§μ΄λ©΄μ 체ν¬
for j in range(1, W+1):
if j > i:
break
# μλκ° 1λ²μμ λ¨μ΄μ§κ³ , κ·Έκ²μ λ°μ λ¨ΉκΈ°
if plums[i] == 1 and j % 2 == 0:
# μμ§μ¬μ λ°μλ¨Ήμ κ²μΈκ°, νμ¬μμΉμμ λ°μλ¨Ήμ κ²μΈκ°
# μ΄μ§νΌ μ΄λν νμλ κ°λ€(μ§κΈ μ΄λνκ±°λ μ΄μ μ μ΄λνκ±°λ)
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + 1
# μλκ° 2λ²μμ λ¨μ΄μ§κ³ , κ·Έκ²μ λ°μ λ¨ΉκΈ°
elif plums[i] == 2 and j % 2 == 1:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + 1
# κ·Έ μΈ - μλ¨Ήλλ€ - κ·Έλλ‘ μκ±°λ μμ§μ¬μ μλ¨Ήμ
else:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1])
print(max(dp[-1]))
πλ¬Έμ νμΈ
μΆμ²: BACKJOON ONLINE JUDGE
λ§ν¬: https://www.acmicpc.net/problem/2240
λ¬Έμ
μλλ μλλ₯Ό μ’μνλ€. κ·Έλμ μ§μ μλλ무λ₯Ό μ¬μ΄λκ³ , μ¬κΈ°μ μ΄λ¦¬λ μλλ₯Ό λ¨Ήκ³ λ νλ€. νμ§λ§ μλλ ν€κ° μμμ μλλ₯Ό λ°λ¨Ήμ§λ λͺ»νκ³ , μλκ° λ¨μ΄μ§ λκΉμ§ κΈ°λ€λ¦° λ€μμ λ¨μ΄μ§λ μλλ₯Ό λ°μμ λ¨Ήκ³ λ νλ€. μλλ₯Ό μ‘μ λμλ μλκ° ν곡μ μμ λ μ‘μμΌ νλλ°, μ΄λ μλκ° λ§λλ§λνμ¬ λ°λ₯μ λ¨μ΄μ§λ©΄ λͺ» λ¨Ήμ μ λλ‘ λκ°μ§κΈ° λλ¬Έμ΄λ€.
맀 μ΄λ§λ€, λ κ°μ λ무 μ€ νλμ λ무μμ μ΄λ§€κ° λ¨μ΄μ§κ² λλ€. λ§μ½ μ΄λ§€κ° λ¨μ΄μ§λ μκ°, μλκ° κ·Έ λ무μ μλμ μ μμΌλ©΄ μλλ κ·Έ μ΄λ§€λ₯Ό λ°μλ¨Ήμ μ μλ€. λ κ°μ λ무λ κ·Έλ€μ§ λ©λ¦¬ λ¨μ΄μ Έ μμ§ μκΈ° λλ¬Έμ, μλλ νλμ λ무 μλμ μ μλ€κ° λ€λ₯Έ λ무 μλλ‘ λΉ λ₯΄κ²(1μ΄λ³΄λ€ ν¨μ¬ 짧μ μκ°μ) μμ§μΌ μ μλ€. νμ§λ§ μλλ 체λ ₯μ΄ κ·Έλ€μ§ μ’μ§ λͺ»ν΄μ λ§μ΄ μμ§μΌ μλ μλ€.
μλλ T(1≤T≤1,000)μ΄ λμ λ¨μ΄μ§κ² λλ€. μλλ μ΅λ W(1≤W≤30)λ²λ§ μμ§μ΄κ³ μΆμ΄ νλ€. 맀 μ΄λ§λ€ μ΄λ λ무μμ μλκ° λ¨μ΄μ§μ§μ λν μ λ³΄κ° μ£Όμ΄μ‘μ λ, μλκ° λ°μ μ μλ μλμ κ°μλ₯Ό ꡬν΄λ΄λ νλ‘κ·Έλ¨μ μμ±νμμ€. μλλ 1λ² μλλ무 μλμ μμΉν΄ μλ€κ³ νλ€.
μ λ ₯
첫째 μ€μ λ μ μ T, Wκ° μ£Όμ΄μ§λ€. λ€μ Tκ°μ μ€μλ κ° μκ°μ μλκ° λ¨μ΄μ§λ λ무μ λ²νΈκ° 1 λλ 2λ‘ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ μλκ° λ°μ μ μλ μλμ μ΅λ κ°μλ₯Ό μΆλ ₯νλ€.
'Algorithm Problem > Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[python] λ°±μ€ - 11052. μΉ΄λ ꡬ맀νκΈ° / 16194. μΉ΄λ ꡬ맀νκΈ° 2 (0) | 2020.09.05 |
---|---|
[python] λ°±μ€ - 1722. μμ΄μ μμ (0) | 2020.09.04 |
[python] λ°±μ€ - 9084. λμ (0) | 2020.09.02 |
[python] νλ‘κ·Έλλ¨Έμ€ - λΈλ‘ μ΄λνκΈ°(2020 KAKAO BLIND RECRUITMENT) (0) | 2020.09.01 |
[python] νλ‘κ·Έλλ¨Έμ€ - κ°μ¬ κ²μ(2020 KAKAO BLIND RECRUITMENT) (0) | 2020.08.31 |