[알고리즘] 다각형의 면적
난이도
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))