[알고리즘] 다각형의 면적

난이도

Gold 5

문제

2차원 평면상에 N(3 ≤ N ≤ 10,000)개의 점으로 이루어진 다각형이 있다. 이 다각형의 면적을 구하는 프로그램을 작성하시오.

출력

첫째 줄에 면적을 출력한다. 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다.

예제 입력

4
0 0
0 10
10 10
10 0

예제 출력

100.0

해설 및 후기

수학적 이론을 알면 쉽게 풀 수 있는 문제이다. 처음에는 헤론의 공식을 이용해서 해결하려고 했으나, 이내 볼록한 다각형이 아니라면 해당 방식으로 풀리지 않는다는 것을 확인했다. 따라서 신발끈 공식을 찾아서 이해하고, 해당 이론을 구현하여 문제를 풀 수 있었다.

제출 코드

import sys
n = int(sys.stdin.readline().rstrip())

xs = []
ys = []
ans = 0
for i in range(n):
    x,y = list(map(int,sys.stdin.readline().rstrip().split()))
    xs.append(x)
    ys.append(y)

xs.reverse()
ys.reverse()
xs.append(xs[0])
ys.append(ys[0])
s1 = 0
s2 = 0
for i in range(n):
    s1 += xs[i]*ys[i+1]
    s2 += xs[i+1]*ys[i]

ans = abs((s1-s2))/2
print(round(ans,1))