π©π»βπ»λ¬Έμ μ€λͺ
[μ΄μ½ν
Ch11-4] λ§λ€ μ μλ κΈμ‘ (그리λ)
λλ€ νΈμμ μ μ£ΌμΈμΈ λλΉμ΄λ Nκ°μ λμ μ κ°κ³ μλ€. μ΄ λ Nκ°μ λμ μ μ΄μ©ν΄ λ§λ€ μ μλ μμ μ μ κΈμ‘ μ€ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±ν΄λΌ.
μλ₯Ό λ€λ©΄,
N = 5μ΄κ³ , κ° λμ μ΄ κ°κ° 3μ, 2μ, 1μ, 1μ, 9μμ§λ¦¬ λμ μ΄λΌκ³ κ°μ νμ. μ΄λ λλΉμ΄κ° λ§λ€ μ μλ μμ μ μ κΈμ‘ μ€ μ΅μκ°μ 8μμ΄λ€.
λ λ€λ₯Έ μμλ‘,
N = 3μ΄κ³ κ° λμ μ΄ κ°κ° 3μ, 5μ, 7μμ΄λ©΄, λ§λ€ μ μλ μμ μ μ κΈμ‘ μ€ μ΅μκ°μ 1μμ΄λ€.
μ λ ₯쑰건
- 첫째 μ€μλ λμ μ κ°μλ₯Ό λνλ΄λ μμ μ μ Nμ΄ μ£Όμ΄μ§λ€. (1 <= N <= 1,000)
- λμ§Έ μ€μλ κ° λμ μ νν λ¨μλ₯Ό λνλ΄λ Nκ°μ μμ°μκ° μ£Όμ΄μ§λ©°, κ° μμ°μλ 곡백μΌλ‘ ꡬλΆνλ€. μ΄ λ, κ° νν λ¨μλ 1,000,000(λ°±λ§) μ΄νμ μμ°μλ€.
μΆλ ₯쑰건
- 첫째 μ€μ μ£Όμ΄μ§ λμ λ€λ‘ λ§λ€ μ μλ μμ μ μ κΈμ‘ μ€ μ΅μκ°μ μΆλ ₯νλ€.
μ
λ ₯μμ
5
3 2 1 1 9
μΆλ ₯μμ
8
βοΈIdea Sketch
λ¬Έμ μμ½
Nκ°μ λμ
1μλΆν° μμ μ μ κΈμ‘μ λ§λ€ μ μλμ§ νμΈ
λ§λ€ μ μλ μμ μ μ κΈμ‘ μ€ μ΅μκ°μ?
μκ°λ³΅μ‘λ
νν λ¨μλ 1,000,000 μ΄νμ μμ°μ --> O(n)μΈ μκ³ λ¦¬μ¦μΌλ‘ ꡬνν΄μΌ ν¨
1μ, 2μ, 3μ, β¦ κ°μ₯ ν° λμ κΉμ§ μμ μ μ κΈμ‘μ λ§λ€ μ μλμ§ νμνλ€. μ λ ₯ 쑰건μμ νν λ¨μλ μ΅λ 1,000,000μ΄λ―λ‘ O(n^2)μΌλ‘ ꡬννλ©΄ 1μ΅μ νμ°Έ λμ΄ μκ°μ΄κ³Όκ° μμλλ€. λ°λΌμ O(n)μ 그리λν μκ³ λ¦¬μ¦μΌλ‘ ꡬνν΄μΌν¨μ λμΉμ± μ μλ€.
μκ³ λ¦¬μ¦ : 그리λ
μμμ μΈκΈν λλ‘ O(n)μ 그리λν μκ³ λ¦¬μ¦μΌλ‘ ꡬνν΄μΌ νλ€. μ°½μλ ₯, μ¦ λ¬Έμ λ₯Ό νκΈ° μν μμ΄λμ΄λ₯Ό λ μ¬λ¦¬λ λ₯λ ₯μ΄ μꡬλλ€. μμ΄λμ΄λ₯Ό λ μ¬λ¦¬λ κ²μ λ§€μ° μ΄λ ΅μ§λ§, λ§μ λ μ¬λ¦¬κ³ λλ©΄ ꡬνμ μ¬μ΄ λ¬Έμ μ΄λ€.
βοΈλ΄ μμ€μ½λ
import sys
si = sys.stdin.readline
n = int(si())
coins = sorted(map(int, si().split()))
cost = 0
for coin in coins:
if cost + 1 < coin:
break
else:
cost += coin
print(cost + 1)