[BaekJoon] 백준 2166번 : 다각형의 면적
Updated:
2166번 : 다각형의 면적
학교 다닐 때 배운 것 같은 신발끈 공식을 이용하여 다각형의 넓이를 구하면 된다.
신발끈 공식을 이용하려면 주어진 점을 시계 방향이나 반시계 방향으로 정렬해야한다.
문제를 잘 읽어보면 다각형을 이루는 순서대로 점을 주기 때문에 주어진 그대로 공식에 적용하면 된다.
처음에 이 조건을 못 봐 시계 방향으로 정렬을 하려고 했는데 굉장히 어려운 문제였다..
탄젠트 각도를 이용해 정렬 한 뒤.. 작업을 한다.. convex hull 문제에 적용이 가능하다.
import sys
def solution():
a, b = 0, 0
for i in range(N):
a += coord_x[i] * coord_y[i + 1]
b += coord_x[i + 1] * coord_y[i]
return abs((a - b) / 2)
if __name__ == "__main__":
N = int(input())
coord_x = []
coord_y = []
for _ in range(N):
coord = tuple(map(int, sys.stdin.readline().split()))
coord_x.append(coord[0])
coord_y.append(coord[1])
coord_x.append(coord_x[0])
coord_y.append(coord_y[0])
print(solution())
Leave a comment