πλ¬Έμ νμνκΈ°
- N(1 ≤ N ≤ 2,000)κ°μ μ μ€μμ μ΄λ€ μκ° λ€λ₯Έ μ λ κ°μ ν©μΌλ‘ λνλΌ μ μμΌλ©΄ "μ’λ€(GOOD)"κ³ νν
- Nκ°μ μκ° μ£Όμ΄μ§λ©΄ κ·Έ μ€μμ μ’μ μμ κ°μλ λͺ κ°μΈμ§ ꡬνκΈ°
- μμ μμΉκ° λ€λ₯΄λ©΄ κ°μ΄ κ°μλ λ€λ₯Έ μ
- μμ λ²μλ (|n| ≤ 1,000,000,000)
ν΄λΉ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μλ μλ€μ μ€λ¦μ°¨μ μ λ ¬νκ³ μμ°¨μ μΌλ‘ μ«μλ₯Ό νμΈνλ©΄μ, λλ¨Έμ§ μ«μλ€ μ€ λ κ°μ μ«μλ₯Ό κ³¨λΌ λ μ«μμ ν©μ΄ νμ¬ νμΈ μ€μΈ μ«μκ° λλμ§ μμλ΄μΌ νλ€. 'λ κ°μ μ«μ'μ ν©μ ꡬν΄μΌ νλ―λ‘ λ κ°μ μ μ μμΉλ₯Ό κΈ°λ‘νλ ν¬ ν¬μΈν°λ₯Ό μ¬μ©ν΄μ ν μ μλ€.
ν¬ν¬μΈν° μκ³ λ¦¬μ¦μ μκ°λ³΅μ‘λλ O(N)μ΄λ―λ‘ λ¬Έμ μμ μνλ λ΅μ ꡬνλ €λ©΄ μ΅μ μ κ²½μ° O(2,000)(λͺ¨λ μ«μμ λν΄μ)*O(2,000)(ν¬ν¬μΈν° μν) = O(4,000,000)μ΄λ―λ‘ μκ° λ΄μ νμ΄κ° κ°λ₯νλ€.
πμ½λ μ€κ³νκΈ°
- μ«μμ κ°μ Nμ μ λ ₯λ°λλ€.
- μ«μλ€μ 리μ€νΈ numbersλ‘ μ λ ₯λ°μ μ μ₯νκ³ , μ€λ¦μ°¨μ μ λ ¬νλ€.
- μ’μ μμ κ°μλ₯Ό μ μ₯ν λ³μ countλ₯Ό 0μΌλ‘ μ΄κΈ°ννλ€.
- numbersμ μ μ₯λ μ«μλ₯Ό νλμ© νμνλ©°, ν¬ ν¬μΈν° μκ³ λ¦¬μ¦μ ν΅ν΄ μ΄μ μ«μλ€ μ€ λ κ°λ₯Ό λν κ°μ΄ νμνλ μ«μκ° λ μ μλμ§ νμΈνλ€.
- start_idxλ₯Ό 0, end_idxλ₯Ό N-1λ‘ μ΄κΈ°ννλ€.
- start_idx < end_idx 쑰건μ λ§μ‘±νλ λμ μλ κ³Όμ μ λ°λ³΅νλ€.
- λ μ«μμ μκΈ°μμ μ΄ ν¬ν¨λλ κ²μ λ°©μ§νκΈ° μν΄, start_idxκ° νμ¬ μ«μ μμΉμ κ°λ€λ©΄ 1μ λν΄μ£Όκ³ , end_idxκ° νμ¬ μ«μ μμΉμ κ°λ€λ©΄ 1μ λΉΌμ€λ€.
- numbers[start_idx] + numbers[end_idx]κ° νμ¬ μ«μλ³΄λ€ ν¬λ€λ©΄, end_idxμ 1μ λΉΌμ€λ€.
- numbers[start_idx] + numbers[end_idx]κ° νμ¬ μ«μλ³΄λ€ μλ€λ©΄, start_idxμ 1μ λν΄μ€λ€.
- numbers[start_idx] + numbers[end_idx]κ° νμ¬ μ«μμ μΌμΉνλ€λ©΄ νμμ μ’ λ£νκ³ countμ 1μ λνλ€.
- countλ₯Ό μΆλ ₯νλ€.
πμλ νμ°¨ μμ μ¬ν
1νμ°¨
ν¬ν¬μΈν°μ μ΄λΆνμμ ν·κ°λ €μ μ½λλ₯Ό μλͺ» μ€κ³νλ€.
2νμ°¨
λ¬Έμ μμ μμ λ²μκ° μμμ νμ λ μ€ μκ³ μμ νμ λ²μλ₯Ό μΈλ²μ§Έ μ«μλΆν°λ‘ μ§μ νκ³ , start_idxλ₯Ό 0, end_idxλ₯Ό νμ¬ μ«μ μμΉ-1λ‘ μ€μ νλ€. μ΄ λΆλΆμ μμ ν΄μ μ λ΅μ λ°μλ€.
πμ λ΅ μ½λ
N = int(input())
numbers = list(sorted(map(int, input().split())))
count = 0
for i in range(N):
cur_num = numbers[i]
start_idx = 0
end_idx = N - 1
while start_idx < end_idx:
if start_idx == i:
start_idx += 1
continue
if end_idx == i:
end_idx -= 1
continue
sum_val = numbers[start_idx] + numbers[end_idx]
if sum_val == cur_num:
count += 1
break
elif sum_val > cur_num:
end_idx -= 1
else:
start_idx += 1
print(count)