[λ°±μ€ 2166 π₯] λ€κ°νμ λ©΄μ
λ¬Έμ
2μ°¨μ νλ©΄μμ N(3 ≤ N ≤ 10,000)κ°μ μ μΌλ‘ μ΄λ£¨μ΄μ§ λ€κ°νμ΄ μλ€. μ΄ λ€κ°νμ λ©΄μ μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ Nμ΄ μ£Όμ΄μ§λ€. λ€μ Nκ°μ μ€μλ λ€κ°νμ μ΄λ£¨λ μμλλ‘ Nκ°μ μ μ x, yμ’νκ° μ£Όμ΄μ§λ€. μ’νκ°μ μ λκ°μ΄ 100,000μ λμ§ μλ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ λ©΄μ μ μΆλ ₯νλ€. λ©΄μ μ μΆλ ₯ν λμλ μμμ μλ λμ§Έ μ리μμ λ°μ¬λ¦Όνμ¬ μ²«μ§Έ μ리κΉμ§ μΆλ ₯νλ€.
λ¬Έμ νμ΄
import sys
n=int(sys.stdin.readline())
point=[list(map(int, sys.stdin.readline().split(' '))) for _ in range(n)]
def ex_product(p1, p2):
global point
v0=point[0]
v1=point[p1]
v2=point[p2]
return 0.5*(v0[0]*v1[1]+v1[0]*v2[1]+v2[0]*v0[1]-v1[0]*v0[1]-v2[0]*v1[1]-v0[0]*v2[1])
ans=0
for i in range(1,n-1):
ans+=ex_product(i,i+1)
print(abs(ans))
μ’νλ‘ μΌκ°νμ λ©΄μ μ ꡬνλ μ λ°λ 곡μμ μ¬μ©νλ€.
λ€κ°νμ κ²½μ°, 첫λ²μ§Έ μ’νλ₯Ό ν¬ν¨ν΄μ μκ³ λ°λ λ°©ν₯μΌλ‘ μμλλ‘ λ κ°μ μ’νλ₯Ό μ νν΄μ 첫λ²μ§Έ μ’νμ μ νλ λ κ°μ μ’ν, μ΄ 3κ°μ μ’νλ₯Ό μ΄μ©ν΄μ ν΄λΉνλ μΌκ°νμ λ©΄μ μ ꡬν΄μ£Όλ©΄ λλ€.
μμ κ°μ΄ μ€κ°νμ μμλ‘ λ€λ©΄, μ λ ₯μ λ°λ μμλλ‘ μ¦, μκ³ λ°λ λ°©ν₯μΌλ‘ μ’νλ₯Ό 2κ°μ© μ ννλ©΄μ λ©΄μ μ ꡬν΄μ£Όλ©΄ λλ€.
0λ²μ§Έ μ μ κΈ°μ€μΌλ‘ μμλλ‘ λ²νΈλ₯Ό λΆμ¬νλ€. μ΄ κ²½μ°, (0,1,2) μΈμ κ° + (0,2,3) μΈμ κ° + (0,3,4) μΈμ κ°μ΄λ€.
μ¬κΈ°μ μ£Όμν μ μ μ€λͺ©ν λΆλΆμ΄ μλ λ€κ°νμ κ³μ°μ΄λ€. μ λ°λ 곡μλλ‘ λ©΄μ μ ꡬν λλ§λ€ μ λκ°μΌλ‘ μ²λ¦¬ν΄μ£Όλ κ²μ΄ μλλΌ, μ λκ° μ²λ¦¬λ λͺ¨λ λ©΄μ κ°μ λ€ λν νμ μ²λ¦¬ν΄μ£Όμ΄μΌ νλ€.
μμ κ°μ΄ μ€λͺ©ν λΆλΆμΈ (0,1,2)μ μΈμ ν κ°μ μ λκ° μ²λ¦¬λ₯Ό ν΄μ£Όμ§ μμΌλ©΄ μμλ‘ μ²λ¦¬λκΈ° λλ¬Έμ μλμΌλ‘ κ³μ°λ λ©΄μ μμ μμ μ²λ¦¬κ° λλ©΄μ μ λ΅μ λμΆν μ μλ€.